linux
Linuxコマンドでkillに"ゼロ"をオプションとして渡すときは
kill -0 [PID]: プロセスが生存しているか確認/li>kill 0: プロセスグループ全体を終了させる
Google検索の仕様上ハイフンが検索しにくくどちらで検索しようとしてもどちらも引っかかってしまうと気づいた。 せっかくなのでどちらを探している人が、着てもよいように kill -0 [PId] と kill 0 の両方の使い方をまとめて紹介する。
kill -0 [PID] : プロセスが生存しているか確認
有無を言わさぬ強制終了コマンドとしてkill -9 [PID]が有名だが、このようにハイフンの後に数値で killの殺意レベル(笑)を表現する考えがあり、その中で最弱レベルの-0を実際にはプロセスを終了させずに 生きているか確認する意味を0に当てはめたのだろう。なお、kill -0 [PID]はプロセスに実際はシグナルを送ることすらしないので、ゾンビ化するなどして 応答しなくなったプロセスに対しても正常終了することは注意。
$ sleep 100 & # バックグラウンドで確認対象プロセスを起動 [1] 1195 $ ps PID TTY TIME CMD 17 tty1 00:00:00 bash 1195 tty1 00:00:00 sleep 1196 tty1 00:00:00 ps # 確かにいる $ kill -0 1195 # プロセスが生存しているときは正常終了。出力はなし $ kill -0 1195 # 2回やっても同じ、実際にはkillしないため $ kill -0 1198 -bash: kill: (1198) - No such process # プロセスが存在しないときはエラー
kill 0: 同プロセスグループ内のプロセス全てをkill
ハイフン意味で大きく意味が異なり、UNIX/Linuxにおいてではあるが こちらは実際にプロセスグループにkillを投げるので注意が必要だ。 プロセスグループとは単一のコマンド・スクリプトやパイプで繫がれて起動された一連のプロセスのことである。 なお単に同一のシェルセッションから起動されただけではプロセスグループは形成されないので、 ここではサブシェルでグループを作り試してみる。$( # ここからサブシェル $ sleep 100 & $ sleep 100 & $ sleep 100 & # 3つのsleepをバックグラウンドで起動 $ jobs -l # PIDを確認 $ sleep 3 $ kill 0 $ jobs -l $) [1] 1230 Running sleep 100 & [2]- 1231 Running sleep 100 & [3]+ 1232 Running sleep 100 & Terminated # kill された $ ps PID TTY TIME CMD 17 tty1 00:00:00 bash 1233 tty1 00:00:00 ps # sleepは確かにみんな終了しているというようにいちいちPIDを指定することなく同じプロセスグループ内の全てのプロセスを終了させることができ便利である。
おすすめ記事
Pythonからシェルコマンドをsubprocessとして呼びだす"chown nobody:nogroup"の意味:nobodyという特殊ユーザの用途
"unlink: cannot unlink 'link/': Is a directory" unlinkにスラッシュを付けてはいけない
同人ゲーム・イラストなど