我想停止执行BASH脚本,直到进程关闭(我将PID存储在变量中)。我在想
while [PID IS RUNNING]; do
sleep 500
done
我见过的大多数例子都使用/ dev / null,这似乎需要root。有没有办法在不需要root的情况下执行此操作?
非常感谢你提前!
如果kill -s 0 $pid
正在运行,$pid
将返回成功,否则失败,而不实际向进程发送信号,因此您可以直接在if
语句中使用它。
wait $pid
将等待这个过程,取代你的整个循环。
好像你想要的
wait $pid
当$pid
完成时将返回。
否则你可以使用
ps -p $pid
检查过程是否仍然存在(这比kill -0 $pid
更有效,因为即使你不拥有pid它也能工作)。
您可能会寻找/proc/YOUR_PID
目录的存在。
我总是使用以下tail -f /dev/null --pid $PID
。它不需要显式循环,并且不仅限于shell的子pids。
ps --pid $pid &>/dev/null
如果存在则返回0,否则返回1