BASH - 检查PID是否存在

问题描述 投票:21回答:5

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

while [PID IS RUNNING]; do
sleep 500
done

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

非常感谢你提前!

bash shell pid
5个回答
32
投票

如果kill -s 0 $pid正在运行,$pid将返回成功,否则失败,而不实际向进程发送信号,因此您可以直接在if语句中使用它。

wait $pid将等待这个过程,取代你的整个循环。


20
投票

好像你想要的

wait $pid

$pid完成时将返回。

否则你可以使用

ps -p $pid

检查过程是否仍然存在(这比kill -0 $pid更有效,因为即使你不拥有pid它也能工作)。


7
投票

您可能会寻找/proc/YOUR_PID目录的存在。


3
投票

我总是使用以下tail -f /dev/null --pid $PID。它不需要显式循环,并且不仅限于shell的子pids。


3
投票

ps --pid $pid &>/dev/null

如果存在则返回0,否则返回1

© www.soinside.com 2019 - 2024. All rights reserved.