53078


`kill -0` という手段を初めて知ったので、`kill -0` の用途を質問させてください。

[kill](http://linuxjm.osdn.jp/html/LDP_man-pages/man2/kill.2.html) の man
には以下のように書かれています。

> sig に 0 を指定した場合、シグナルは送られないが、 エラーのチェックは行われる。これを使って、プロセス ID や プロセスグループ ID
> の存在確認を行うことができる。

プロセスを制御する手段として、おなじみなのは、PID をファイルに保存しておき、プロセスを終了させたいときは PID ファイルの中身の PID を指定して
kill するというものです。

たとえばプロセス foobar を以下のように起動させて

[code]

    foobar &
    echo $! > foobar.pid
    
[/code]

終了させるとき

[code]

    kill -9 $(cat foobar.pid)
    
[/code]

ここではシグナル 9 を送信( `kill -9` )していますが、冒頭に引用したように、シグナル 0 を送信( `kill -0`
)することもできるようです。

`kill -0` の用途としては、以下のような理解であっているでしょうか？

プロセス foobar の状態と foobar.pid ファイルの存在有無は関係が無い。つまり、foobar.pid
ファイルが存在していたとしても、それがプロセス foobar が走っているという保証にはならない。ゆえに、プロセス foobar の状態を確認するために
kill -0 を用いる。


CC BY-SA 4.0
2019-02-28T01:12:42.310
53077
2019-02-28T02:01:13.160
9592
question
linux
kill -0 <PID> は何をするのでしょうか？


おおむね、その理解でよろしいかと存じますが、少し指摘をさせていただきます。

まず、プロセスIDは使い回される場合があり、通常はインクリメントで増えていきますが、 `/proc/sys/kernel/pid_max`
で定義される最大値を超えるとこれまでに使ったプロセスIDを利用した別のプロセスが実行される場合が有り、pidファイルに記載されたプロセスが走っている保証にはなりません。

また、sig 0についてですが、kill from util-linux 2.33.1 の`man 2 kill`
によると、以下のとおりになり、記載された内容とは異なります。

> If sig is 0, then no signal is sent, but existence and permission checks are
> still performed; this can be used to check for the existence of a process ID
> or process group ID that the caller is permitted to signal.
>
> sig に 0 を指定した場合、シグナルは送られないが、 プロセスの存在と権限のチェックは行われる。これを使って、送信者がシグナルを送信できるプロセス
> ID や プロセスグループ ID の存在確認を行うことができる。

という訳で、`kill` の権限があるかどうかの確認に使うことも可能そうです。


CC BY-SA 4.0
2019-02-28T01:57:22.757
53078
2019-02-28T01:57:22.757
2020-06-17T08:14:45.997
-1
29826
53077
answer


該当オプションはこの質問で私も初めて知りましたが、おおむね想定されている内容で合っているのではないでしょうか。

`/var/run/***.pid`ファイルを使用する場合でも、何らかの理由でプロセスが終了しているのにPIDファイルが残り続けてしまう場合がごく稀にあります。

`kill -0 <PID>`の方法であれば、上記のPIDファイルの有無によらず実際のプロセスの生存確認ができる、ということなのかなと思いました。  
`kill -0
<PID>`実行後に終了ステータス`$?`の値をチェックすることで生存確認ができるので、PIDを狙い撃ちでチェックしたいなら、よく使う`ps +
grep`や`pgrep`よりもシェルスクリプトなどの記述がすっきりするのかもしれません。

参考:  
[What does `kill -0` do? - Unix & Linux Stack
Exchange](https://unix.stackexchange.com/q/169898/298771)


CC BY-SA 4.0
2019-02-28T02:01:13.160
53079
2019-02-28T02:01:13.160
3060
53077
answer