Bashで実行されるコマンドのPIDを取得する方法を誰かに教えてもらえますか?.
例えば。 imapsyncを実行するbashスクリプトがあります。
スクリプトが強制終了されると、imapsyncプロセスが常に強制終了されるとは限らないため、スクリプトからプログラムでimapsyncのPIDを識別できるようにして、シグナルハンドラーで自分でimapsyncプロセスを強制終了できるようにします。
では、親のbashスクリプトから子プロセスのPIDをプログラムで取得するにはどうすればよいでしょうか。
imapsyncには、pidが書き込まれる場所を設定するオプションがあります。
--pidfile:imapsync pidが書き込まれるファイル。
any_command args &
my_child_PID=$!
IOW、ちょうど$$
はPIDを保持します、$!
には最後に実行されたバックグラウンドコマンドのPIDがあります。
pidof
とは異なり、pgrep
には、PIDを返すプロセスを制限するためのさまざまなオプションを指定できます。特に便利なのは、現在のプロセスのPIDを使用してPPIDに基づいて選択することです。
pgrep -P $$ imapsync
スクリプトの子である場合のみ、imapsyncのPIDを出力します。
Imapsyncを一時的にバックグラウンドに配置し、PIDを取得してからフォアグラウンド化してみてはどうでしょう...次のようなもの:
imapsync &
pid=$!
wait $pid
retVal=$?