この問題は非常に簡単のようで、「ps -ef | grep xx」だけで完了します。もちろんこれも可能ですが、パフォーマンスを考慮すると、これは良い考えではないかもしれません。
プロセスが生きているかどうかを監視し、毎分チェックしたいとします。上記の方法を使用すると、ps コマンドを毎分実行し、grep の定期検索を実行する必要があります。
このオーバーヘッドはサーバー上では何もないようですが、同じノード上の数十、数百のそのようなプロセスを同時に監視したい場合はどうすればよいでしょうか? (推奨学習: linux チュートリアル)
したがって、パフォーマンスの観点からより良い方法をいくつか検討する必要があります。
デーモン プロセスの場合、通常、独自の pid ファイルまたはロック ファイルがあり、これらのファイルが存在するかどうかを確認して、プロセスが存在するかどうかを判断できます。しかし、異常な状況下では、pid ファイルが存在するプロセスが存在しないことがあります。したがって、プロセスの pid ファイルに依存してプロセスが生きているかどうかを検出することはできません。
信頼できる方法は、「kill -0 pid」を使用することです。kill -0 はプロセスにシグナルを送信しませんが、エラー チェックを行います。このコマンドは、プロセスが存在する場合は 0 を返し、プロセスが存在しない場合は 1 を返します。
[sw@gentoo ~]$ ps PID TTY TIME CMD pts/0 00:00:00 bash pts/0 00:00:00 ps [sw@gentoo ~]$ kill -0 15091 [sw@gentoo ~]$ echo $? [sw@gentoo ~]$ kill -0 15092 -bash: kill: (15092) - No such process [sw@gentoo ~]$ echo $? [sw@gentoo ~]$
ただし、このメソッドは一般ユーザーが自分のプロセスを確認する場合にのみ使用できます。他のユーザーのプロセスにシグナルを送信すると権限がないためエラーが発生し、戻り値は1も。
[sw@gentoo ~]$ kill 2993 -bash: kill: (2993) - Operation not permitted [sw@gentoo ~]$ echo $? [sw@gentoo ~]$
もちろん、特権ユーザーを使用して kill コマンドを実行する場合、権限の問題は発生しません。
以上がLinuxをチェックしてプロセスが存在するかどうかを確認しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。