我想暂停执行BASH脚本,直到进程关闭(我将PID存储在变量中)。我在想
BASH - 检查PID是否存在
while [ PID IS RUNNING]; do
sleep 500
done
我看过的大多数例子都使用/ dev/null,这似乎需要root权限。有没有办法做到这一点,而不需要根?
非常感谢您提前!如果$pid
运行
我想暂停执行BASH脚本,直到进程关闭(我将PID存储在变量中)。我在想
BASH - 检查PID是否存在
while [ PID IS RUNNING]; do
sleep 500
done
我看过的大多数例子都使用/ dev/null,这似乎需要root权限。有没有办法做到这一点,而不需要根?
非常感谢您提前!如果$pid
运行
kill -s 0 $pid
将返回成功,否则失败,而无需实际发送信号的过程,这样你就可以直接使用,在你的if
声明。
wait $pid
将等待该过程,取代您的整个循环。
我总是使用以下 tail -f /dev/null --pid $PID
。它不需要显式循环,并且不仅限于你的shell的子pid。
FreeBSD和OSX上的'tail'命令不包含'--pid'选项。如果OP不询问特定的操作系统,则应该限定您提供的平台特定答案。 – ghoti 2015-07-30 04:03:37
好像你要
wait $pid
将返回时$pid
结束。
否则,你可以使用
ps -p $pid
检查过程是否还活着(这比kill -0 $pid
更有效,因为它会工作,即使你没有自己的PID)。
ps --pid $pid &>/dev/null
返回0,如果它存在,否则为1点
'ps'的'--pid'选项可能在你的操作系统中工作,但它在我的工作中不起作用。 OP是否提到了他正在运行的操作系统?如果没有,您应该限定您提供的特定于操作系统的和不可移植的答案。 – ghoti 2015-07-30 04:01:37
够公平的。 '--pid'适用于Ubuntu 12.04。 – 2015-07-30 04:08:18
退房http://stackoverflow.com/questions/356100/how-to-wait-in-bash-for-several-subprocesses- to-finish-and-return-exit-code-0-w – atk 2011-03-05 21:55:28
请看[Process Management](http://mywiki.wooledge.org/ProcessManagement)。你能举一个使用'/ dev/null'的例子,它需要root吗?我无法想象这将是怎样的情况,或者它将如何适用于这种情况。 – 2011-03-05 22:01:20
/dev/null的哪些用法似乎需要root?想不出任何。 – ndemou 2015-10-27 11:05:20