
シェルスクリプトは、2つの機能をサブプロセスとして実行します(&を介して)。
どちらも眠りに落ちました(sleepコマンドで)。
目覚めてもいいですか?
私は彼らのPIDを持っています。
PS
私は寝て&と一緒に待ちたくありません。
答え1
やや残忍なアプローチは、sleep
プロセスを終了することです(スクリプト/関数が実行されている完全なサブシェルではありません)。次のシェルスクリプトを考えてみましょう。
#!/bin/bash
sleep 20
echo "Done!"
または、次の関数を使用してください。
#!/bin/bash
function gotosleep()
{
sleep 20
echo "Done!"
}
gotosleep &
sleep 60 # Not really necessary, keeps the script in foreground.
次に、sleep
プロセスを見つけます。
$ ps -ef | grep sleep
you PID PGID ... sleep 20
そしてそれを殺す:
$ kill PID
これによりスクリプトが出力されます(最小bash
)。
./script.sh: line 2: PID Terminated sleep 20
Done!
そうしたくないので、wait
Bashの小さなメッセージを処理する必要があります。考えが変わったらぜひご覧くださいこの問題:
sleep 20 &
if wait $! 2>/dev/null; then
# Keep working
continue
else
echo "Done!"
return # from function
fi