频繁通过kill -0 轮询进程

频繁通过kill -0 轮询进程

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"

相关内容