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