次の問題があります: 内部バックグラウンド プロセスを実行するスクリプトがあります。
====myinternalscript====
...
myinternalscript-program &
...
これは、 myinternalscript-program の終了を待機するスクリプトから次のように呼び出されます。
====mainscript====
...
myinternalscript
while [ "$(ps -u ${CURRENT_USER} | grep myinternalscript-program)" ];
...
問題は、最初の呼び出しが終了する前にmainscriptを再度呼び出したいときに発生します。これにより、最初の呼び出しに関連するmyinternalscript-programが 2 番目の myinternalscript-programが終了する前に終了した場合でも、 mainscriptへの最初の呼び出しの一時停止条件は真のままになります ( myinternalscript-programが 2 番目のmainscript呼び出しによって呼び出されるため) 。 call は、2 番目のmainscriptによって呼び出されたmyinternalscript-programも終了するまで進みません。
私の解決策は次のとおりです。
====mainscript====
...
myinternalscript
internalpid = #some way to get the myinternalscript-program PID
while [ "$(ps -u ${CURRENT_USER} | grep myinternalscript-program| grep $internalpid)" ];
...
「internalpid」には、 myinternalscript の実行中に呼び出された myinternalscript-program の PIDがあります。
回答の 1 つで示唆されているように、$! myinternalscript-programがmyinternalscriptで必要な PID 情報を提供できた後、その情報をmainscriptに取得する方法を想像できましたが、myinternalscriptを編集する権限がありません。この文脈での課題は次のとおりです。
myinternalscriptを編集せずにmainscriptでmyinternalscript -program PIDを取得する方法は?
明らかに、問題を解決するためにメインスクリプトの実行を一時停止する他の方法を使用することもできますが、最初にやりたかったことが達成できるかどうかはわかりません。
コメントはありますか?