私はいくつかのサブプロセスを起動するbashスクリプトを実行しようとしています。プロセスは独自のログファイルにリダイレクトされ、それらを並行して実行する必要があります。これを行うには、同じ親PIDを使用するプロセスの数を監視するcheck_procsプロシージャを作成しました。番号が再び1に達すると、スクリプトは続行する必要があります。しかし、それはちょうどハングアップしているようです。私がなぜわからないが、コードは以下の通りです:プロセスがキックオフされた後
check_procs() {
while true; do
mypid=$$
backup_procs=`ps -eo ppid | grep -w $mypid | wc -w`
until [ $backup_procs == 1 ]; do
echo $backup_procs
sleep 5
backup_procs=`ps -eo ppid | grep -w $mypid | wc -w`
done
done
}
この関数が呼び出されて、私はそれがプロセスの数からエコーが、その後エコー停止を示唆している(参照することができます関数はプロセスのカウントが1になってから完了しましたが、何も起こらず、スクリプトがサーバーのプロセスリストにまだ残っているのを見ることができます。
for ((i=1; i <= $threads; i++)); do
<Some trickery here to generate $cmdfile and $logfile>
nohup rman target/cmdfile=$cmdfile log=$logfile &
x=$(($x+1))
done
check_procs
$スレッドスクリプトに渡されるコマンドラインパラメータであり、のように、これらはnohupを使用してキックオフされた4または6のような小さい数であります表示されます。 check_procsのIFが満たされると、残りのスクリプトを実行する代わりにすべてがハングします。私の機能に何が問題なのですか?
デバッグするときに、いくつかの 'echo'sをスティックします。 untilループの前に 'echo '、backup_procs == $ backup_procs"、 'echo" untilループ "'、 '' untilループの後に ''など '私はあなたの' while true'が永遠に起こっていると思っています – slim
あなたは決して終了しないあなたの真のループです。どこかでブレークを追加する必要があります – Pawamoy
https://unix.stackexchange.com/questions/155551/how-to-debug-a-bash-script bashスクリプトをデバッグするには – skr