Linux 中的以下脚本打印“sleep 1 finish”,但在一般 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
等待睡眠退出的另一种方法是使用以下wait
命令:
sleep 2 &
pid=$!
sleep 1 &
pid_sleep=$!
wait $pid $pid_sleep
echo "commands finished"