Linux 上にプロセスが存在するかどうかの検出 (推奨される学習: Linux の運用と保守)
この問題は次のように考えられます。非常に簡単です。"ps -ef | grep xx"そのまま実行してください。もちろんこれも可能ですが、パフォーマンスを考慮すると、これは良い考えではないかもしれません。
プロセスが生きているかどうかを監視したいとします。 1 分ごとに確認します。上記の方法を使用すると、ps コマンドを 1 分ごとに実行し、grep の定期検索を実行する必要があります。 このオーバーヘッドはサーバー上では何もないようですが、同じノード上の数十、数百のそのようなプロセスを同時に監視したい場合はどうすればよいでしょうか?
したがって、パフォーマンスの観点からより良い方法をいくつか検討する必要があります。
デーモン プロセスの場合、通常、独自の 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 $? 1 [sw@gentoo ~]$
もちろん、特権ユーザーを使用して kill コマンドを実行する場合、権限の問題は発生しません。
以上がLinuxはプロセスが存在するかどうかを検出しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。