Ruby on Railsアプリケーションに対して、「delayed_job」というスクリプトを実行します。オプションの1つは、このprocを別のモニターprocで実行することです。メインプロセスが終了すると、モニターは新しいプロセスを生成します。複数のプロセスを実行することもできます。それぞれに独自のモニタープロセスが関連付けられます。
スクリプトは、メインプロセスを強制終了する方法を提供しますが、モニタープロセスは強制終了しません。全部殺したい。
次のコマンド:
ps -ef|grep delayed
収量:
42011 29423 1 0 Sep25 ? 00:00:02 delayed_job.0_monitor
42011 29428 1 0 Sep25 ? 00:00:02 delayed_job.1_monitor
42011 29434 1 0 Sep25 ? 00:00:02 delayed_job.2_monitor
42011 29437 1 0 Sep25 ? 00:00:01 delayed_job.3_monitor
42011 23359 1 10 Oct19 ? 03:12:49 delayed_job.0
42011 8607 1 5 Oct19 ? 00:58:42 delayed_job.3
42011 21442 1 44 12:31 ? 01:02:03 delayed_job.2
42011 23092 1 4 14:18 ? 00:01:22 delayed_job.1
42011 23861 23763 0 14:51 pts/5 00:00:00 grep delayed
それらすべて、または少なくともモニターを殺したい。どうすればこれらを強制終了できますか(grepコマンド自体を除く)?
http://www.tech-recipes.com/rx/742/kill-the-undesired-unix-processes-in-one-go/ ジェネリックの通常の答えの素晴らしい記事がありますunix:psをgrep、awk、xargsの順にパイプします。
別のポスターが述べたように、「killall」を投げかけるglibの回答には注意してください。これは、AIXとSolarisでは(少なくとも)Linuxとは根本的に異なる目的を持っているためです。 Solarisでrootとしてkillallを実行することは、「再開生成イベント」です。
上記のpkillとkillallの回答以外に、プロセス「foo」を強制終了したい場合は、次の操作を実行できます。
ps -ef | grep [f]oo | awk {'print $1'} | xargs kill
grep [f]oo
は、grepがgrepコマンド自体と一致しないため、「foo」という名前のプロセスを強制終了することを意味します。
Linuxマシンを実行している場合、killallコマンドが探しているもののようです。
pkill
とkillall
はこれの変形です。
# pkill vim
# killall vim
どちらも、それぞれのマンページにドキュメントを拡張しています。