これらが唯一の理由かどうかはわかりませんが、これが私の訓練です:
目的のプロセスを強制終了するシェルスクリプトの書き方によっては、ターゲットを強制終了する前に kill PID を強制終了する可能性があります。mydaemon を取り上げましょう。 例:
kill -9 `ps ax | grep mydaemon | awk '{ print $1 }'`
A) SIGPIPE-ing killIn 32 ビット Linux PID は通常 15 ビット整数であり、オーバーフローが頻繁に発生します。grep または awk PID が mydaemon の PID よりも前に表示される可能性がかなり高くなります。 . 64 ビットの PID 番号は通常 22 ビットであり、発生する可能性は 100 倍以上低くなりますが、それでもかなり現実的です。
パイプのいずれかを殺すと、SIGPIPE を受け取ります。通常、これは死を意味するため、kill mydaemon を殺す前に殺される 殺害の試みを失敗させます。
B) 他の PID の強制終了また、vi /etc/mydaemon/mydaemon.conf があったとします。 root としてそのようなコマンドを発行する可能性が高いため、他のユーザーのプロセスは言うまでもなく、その PID も強制終了される可能性があります。
C) シンプルな unix ライクなロックです -> 追加のコード/デーモンは必要ありません.PidFiles は、ユーザーが管理可能なロックを作成する非常に簡単な方法を作成し、不注意にデーモンを 2 回生成しないようにします.
pid ファイルには、特定のプログラムのプロセス ID (数字) が含まれています。たとえば、Apache HTTPD は、そのメイン プロセス番号を pid ファイル (通常のテキスト ファイルであり、それ以上のものではない) に書き込み、後でそこに含まれる情報を使用して自分自身を停止する場合があります。 cat filename.pid | xargs kill
を使用して、その情報を使用して自分でプロセスを強制終了することもできます