BASH - 检查PID是否存在

时间:2011-03-05 21:51:46

标签: bash shell pid

我想停止执行BASH脚本,直到进程关闭(我将PID存储在变量中)。我在想

while [PID IS RUNNING]; do
sleep 500
done

我见过的大多数例子都使用/ dev / null,这似乎需要root。有没有办法在不需要root的情况下执行此操作?

非常感谢你!

5 个答案:

答案 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,否则返回