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
、中を調べる必要はありません。/proc
exe