web-dev-qa-db-ja.com

特定の名前のすべてのプロセスを強制終了するUnixタイプのコマンドはありますか?

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コマンド自体を除く)?

4
user114055

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を実行することは、「再開生成イベント」です。

5
Mark

上記のpkillとkillallの回答以外に、プロセス「foo」を強制終了したい場合は、次の操作を実行できます。

ps -ef | grep [f]oo | awk {'print $1'} | xargs kill

grep [f]ooは、grepがgrepコマンド自体と一致しないため、「foo」という名前のプロセスを強制終了することを意味します。

3
slillibri

Linuxマシンを実行している場合、killallコマンドが探しているもののようです。

2
mdpc

pkillkillallはこれの変形です。

# pkill vim

# killall vim

どちらも、それぞれのマンページにドキュメントを拡張しています。

2
Kvisle