それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

プロセス管理でプロセスグループをkillする

プロセスグループをKILLしたい。

プロセスからfork したプロセスから forkしたプロセス、子プロセス・孫プロセスを除去したい。

プロセスグループの確認

ps -ejH で PGIDとSIDを確認する

ps -ejH | 
  PID  PGID   SID TTY          TIME CMD
19666 19666 19666 ?        00:00:00   ssh
19668 19666 19666 ?        00:00:00     ssh

まともなプログラムを書いているなら、ForkしたときにPGIDを設定して子プロセスとして生成しているはず。

プロセスの親子関係や、プロセスグループ、プロセスの祖先と子孫がたどれるようにプロセスは生成される(ようにプログラムを書いているはず、もし辿れないなら意図的に別プロセスで起動しようとして失敗しているかもしれない。)

プロセスをkillする

親のプロセスIDがわかるなら、pkillを使うのが早い

pkill -P 親のPID

killコマンドで負数を指定する(pkillがない場合など)

kill -- -1234

プロセスを識別せずに全部消したい

commandの文字列にマッチさせてすべて除去したいのであれば killall が使える。

killall でコマンドを全部消す。

killall /usr/bin/ssh

複数起動していて残すべきものがない場合は、すべて消せる。そのときは killall で手っ取り早い。

また、pkillでもできる。

pkill /usr/bin/ssh

プロセスを消す場合には起動時に覚えておく。

pidファイルを作って保存しておけば、PIDファイルを見てグループを除去できる。

普段使わないから、なかなか覚えられないんですよねぇ。

参考資料