web-dev-qa-db-ja.com

名前に基づいて-9キルするシェルスクリプト

このプロセスを自動化する方法(おそらくスクリプト)があります:

petr@sova:~$ ps -ef | grep middleman
petr     18445  2312  1 12:06 pts/2    00:00:01 /home/petr/.rvm/gems/Ruby-1.9.3-p362/bin/middleman                                                                  
petr     18581 13621  0 12:08 pts/0    00:00:00 grep --color=auto middleman
petr@sova:~$ kill -9 18445

残念ながら、pkill-9オプションを使用する必要があるため、killは弱すぎます。

28
mreq

シェルを使用してこのタスクを実行できます。

kill -9 $(pidof middleman)

シェルは最初にコマンドpidof middlemanを実行します。 pidof(8) の出力はプロセスIDです。そのため、シェルはpidof-コマンドをプロセスIDで置き換え、kill -9 18845(または正しいプロセスIDが何であれ)を実行します。

35
qbi

Qbiの場合よりもさらに簡単な解決策があります。killallでは、名前でプロセスを強制終了できます。また、シグナルを指定できます。

killall -9 middleman

詳細と追加のオプションについては man killall をご覧ください(かなりあります)。

名前が示すように、これはmiddlemanという名前のプロセスにallシグナルを送信します。しかし、それは他の方法(pkillなど)と違いはありません。さらに、pkill -9 middlemanは、middleman2など、名前は一致するがmiddlemanに等しくないプロセスをターゲットにします。

54
Gerhard Burger

他の答えは完全に正しいですが、3番目のオプションを追加して、すべてをここに文書化することもできます。以下も使用できます。

pkill -9 middleman

詳細と追加オプションについては、man pkillを参照してください。

これらの方法のどれを使用するかは実際には関係ありません。それらはすべて機能します。ただし、動作を何らかの方法で変更したい場合は、対応するオプションが利用可能な他の一致するオプションを示しているため、有用であればオプションを知っている必要があります。

16
Robie Basak
pkill -9 -f middleman

-fオプションは、プロセス名だけではなく、完全なコマンドラインと一致させます。

-9はラストリゾートシグナルであり、日常的に使用するものではないことに注意してください。

12
jlliagre

ただの楽しみのために、私はもっとマニュアルの古い学校の方法を追加したいと思います

kill -9 `ps aux | grep middleman | awk '{print $2}'`
10
slipset
killall -9 -ir regex_pattern

これはインタラクティブ(安全)で、部分的なコマンド名と一致します。

1
Bohr