特定のPIDを持つプロセスが実行されていることを確認するための信頼性の高いクロスプラットフォーム方法を探しています。 2つの可能な解決策が現れた。
kill -0 $PID
- 終了ステータスは、プロセスが存在する場合は0、存在しない場合は1です。ただし、終了するために追加の権限が必要なPIDの場合も1を返します。ps a | grep "^\s*${PID}"
そしてそのようなものは醜いです。
#1のようなものを所有者に制限なく持つ方法はありますか?
答え1
小さなCプログラムを書くことはできますか?kill(2)
UIDに指定されたプロセスにシグナルを送信する権限がない場合、システムコールは-1を返しますが、存在しないPIDではなく、この場合はerrno
-1に設定されます。私はこれをSolaris、HP-UX、Linux、および* BSDの間で移植可能にすることができると確信しています。各プラットフォームでコンパイルする必要があります。EPERM
ESRCH