我想要在我的BASH脚本中延迟执行,直到一个进程关闭(我已经将PID存储在一个变量中)。我在思考
while [PID IS RUNNING]; do
sleep 500
done
我看到的大多数示例都使用/dev/null,似乎需要root权限。有没有不需要root权限就能做到这一点的方法?
非常感谢您的帮助!
kill -s 0 $pid
如果进程$pid
正在运行,则返回成功,否则返回失败,而不会向进程发送信号,因此您可以直接在if
语句中使用它。
wait $pid
将等待该进程完成,取代了你整个循环。
while sleep 1; do kill -0 $PIDD || break; done
。 - JohnPkill -0 $pid
仅适用于您拥有的进程。ps -p $pid
适用于任何进程。 - sligockiwait $pid
只在你是 $pid
的父进程时起作用。 - Harish看起来你想要
wait $pid
当$pid
完成时,将返回结果。
否则,你可以使用
ps -p $pid
为了检查进程是否仍然存在(这比kill -0 $pid
更有效,因为它可以在您不拥有该pid的情况下工作)。
wait
仅在 $pid
是 shell 的子进程时才起作用。在这些情况下,这可能经常发生,但并非总是如此。 - Peter Eisentrautwait
is not useful when scripting. If the goal is to quickly determine if a pid exists, then do something, wait would have be be bg which is inefficient. The second solution is better. Include removing the header and its usable: ps -p $pid | tail -n +2
- Davewait
所做的。wait
在脚本中完全可用,我已经使用过很多次!它只取决于你的用例。 - sligocki/proc/YOUR_PID
目录是否存在,来判断是否有相关进程。kill -s
技巧。 - Zouppenps --pid $pid &>/dev/null
如果进程存在,返回0,否则返回1。
ps
命令的--pid
选项在你的操作系统中可能有效,但在我的系统中却不起作用。原帖中提到了他使用的操作系统吗?如果没有,你应该在提供特定于操作系统且不可移植的答案时进行说明。 - ghotitail -f /dev/null --pid $PID
。它不需要显式循环,并且不仅限于您的shell子进程pid。tail
命令不包括--pid
选项。如果OP没有询问特定的操作系统,您应该限定任何平台特定的答案。 - ghoti
/dev/null
的例子?我无法想象这种情况可能是什么或者它如何适用于这个案例。请参考进程管理页面。你能否展示一个需要root权限才能使用/dev/null
的例子?我无法想象在这种情况下它可能被如何应用或有何作用。 - Dennis Williamson