web-dev-qa-db-ja.com

bash子プロセス(imapsync)のPID-どのように取得しますか?

Bashで実行されるコマンドのPIDを取得する方法を誰かに教えてもらえますか?.

例えば。 imapsyncを実行するbashスクリプトがあります。

スクリプトが強制終了されると、imapsyncプロセスが常に強制終了されるとは限らないため、スクリプトからプログラムでimapsyncのPIDを識別できるようにして、シグナルハンドラーで自分でimapsyncプロセスを強制終了できるようにします。

では、親のbashスクリプトから子プロセスのPIDをプログラムで取得するにはどうすればよいでしょうか。

15
Jason Tan

imapsyncには、pidが書き込まれる場所を設定するオプションがあります。

--pidfile:imapsync pidが書き込まれるファイル。

4
Gilles LAMIRAL
any_command args &
my_child_PID=$!

IOW、ちょうど$$はPIDを保持します、$!には最後に実行されたバックグラウンドコマンドのPIDがあります。

46
Javier

pidofとは異なり、pgrepには、PIDを返すプロセスを制限するためのさまざまなオプションを指定できます。特に便利なのは、現在のプロセスのPIDを使用してPPIDに基づいて選択することです。

pgrep -P $$ imapsync

スクリプトの子である場合のみ、imapsyncのPIDを出力します。

Imapsyncを一時的にバックグラウンドに配置し、PIDを取得してからフォアグラウンド化してみてはどうでしょう...次のようなもの:

imapsync &
pid=$!
wait $pid
retVal=$?
0
Mark