プロセスID (PID) が存在するかどうかを確認する方法 質問する

プロセスID (PID) が存在するかどうかを確認する方法 質問する

bash スクリプトでは、次の操作を実行します (疑似コード)。

if [ a process exists with $PID ]; then

    kill $PID 

fi

条件文の適切な表現は何ですか?

ベストアンサー1

最善の方法は次のとおりです。

if ps -p $PID > /dev/null
then
   echo "$PID is running"
   # Do something knowing the pid exists, i.e. the process with $PID is running
fi

問題は、kill -0 $PIDプロセスが実行中で、それを強制終了する権限がない場合でも、終了コードがゼロ以外になることです。例:

kill -0 $known_running_pid

そして

kill -0 $non_running_pid

通常のユーザーには区別がつかない非ゼロの終了コードがありますが、そのうちの 1 つは実行中であると想定され、もう 1 つは実行されていません。


部分的に関連しますが、 AnrDaemonによって提供された追加情報: init プロセス (PID 1) は確かにすべての Linux マシンで実行されていますが、すべての POSIX システムが Linux であるわけではありません。PID 1 がそこに存在するとは保証されていません。

kill -0 1 
-bash: kill: (1) - No such process … 

議論

テスト本体が「kill」である場合、kill と競合状態について議論する回答は正確です。私は「bash で PID の存在をテストする方法」という一般的な質問を探していました。

この/proc方法は興味深いものですが、ある意味ではコマンド抽象化の精神に反しています。つまり、Linus がファイルに別の名前を付けることにした場合に備えてps、中を調べる必要はありません。/procexe

おすすめ記事