私はチェーン内のプログラムを起動したい、たとえばbashスクリプトのstartScript.shを起動し、startScript.shのチェーンで特定のプログラムを読み込むようにしたい。bashのプログラムのチェーンの開始
startScript.sh
./program1 &
#PID=(echo $!)
PID=$!
echo "Wait for 10 seconds here"
if ps -p $PID > /dev/null; then echo "continue"; ./program2; else echo "PID is not running"; exit; fi
echo "Wait for 10 seconds here"
#if program1 is running and program2 is running, then ./program3, else exit.
私は$!でプログラム1の実行中のPIDを見つけることを試みたが、問題はプログラム1は、シェルスクリプト自体であり、彼らは私が興味がないここでさらにシェルスクリプトを呼び出すことです。したがって、$!私に./program1のpidを与えることはありませんが、無関係なものです。プログラム1のPIDを取得できますか?
また、program1とprogram2のPIDを取得して、プログラムが実行されているかどうかを確認してから、program3を起動する方法もあります。
'PID = $! 'で試してみてください。今は 'PID'を' echo'とあなたのPIDを含む配列に設定しています(このコンテキストでは意味をなさない)。 – randomir
はエコーのエラーを修正しました。それでも問題は解決しません。プログラム1は内部的にさらなるバックグラウンドプロセスを呼び出します。だから、$!私はプログラムのものではなく、それ以上のバックグラウンドプロセスのpidを返します。 – infoclogged
program1がそれ以上のプロセスを開始するかどうかは関係ありません。プロセス自体であり、したがって 'PID!'を使って取得できます。 – arco444