
Linuxの次のスクリプトは "sleep 1 end"を印刷しますが、通常POSIXではsleep 0.1
引数が整数でなければならないため、これは使用できません。このコマンドを無視すると、スクリプトは決して終了しませんが(なぜ!?)、CPUリソースが大量に消費されます。システムを交換すると、( : )
システムで動作しますが、一般的に機能しているのか、CPUのパフォーマンスが必要なのかはわかりません。より良いPOSIXソリューションは何ですか?
#!/bin/sh
sleep 2 &
pid=$!
sleep 1 &
pid_sleep=$!
while kill -0 "$pid" 2>/dev/null; do
kill -0 "$pid_sleep" 2>/dev/null || {
echo sleep 1 finished
exit 0
}
sleep 0.1
done
答え1
スリープモードが終了するのを待つもう1つの方法は、次のwait
コマンドを使用することです。
sleep 2 &
pid=$!
sleep 1 &
pid_sleep=$!
wait $pid $pid_sleep
echo "commands finished"