是否有要阻止的linux命令,直到进程退出?
这正是问题所要问的。此外,我所拥有的只是PID,我运行命令的shell不一定是最初调用进程的shell。有什么想法吗?这不是一个很好的方法,但是您可以连续向指定的pid发出是否有要阻止的linux命令,直到进程退出?,linux,bash,csh,Linux,Bash,Csh,这正是问题所要问的。此外,我所拥有的只是PID,我运行命令的shell不一定是最初调用进程的shell。有什么想法吗?这不是一个很好的方法,但是您可以连续向指定的pid发出kill(2)系统调用,将零作为信号。通过将errno设置为ESRCH,第一次kill未成功时,您可以断定进程已退出。您可以检查dir/proc/PID是否存在。它似乎比发送多个信号更干净 while ps -p $PID >/dev/null 2>&1; do sleep 1; done 或 我知道问一
kill(2)
系统调用,将零作为信号。通过将errno
设置为ESRCH
,第一次kill
未成功时,您可以断定进程已退出。您可以检查dir/proc/PID是否存在。它似乎比发送多个信号更干净
while ps -p $PID >/dev/null 2>&1; do sleep 1; done
或
我知道问一个关于这个问题的问题是不符合犹太教的,但是。。。您如何知道尚未创建的进程的PID?PID可以是相当随机的。当然,在实践中,它们是线性分配的,但您不知道在时间
A
和B
之间会启动多少进程,或者PID计数器是否会换行。@TomMD可能使用pidof
在运行时查找进程的PID,或者其他方法。有一百种不同的方法可以让他获得进程的PID,而不是在shell脚本中硬编码;)@TomMD我知道PID是因为我知道进程名,并且我可以使用ps命令来获取PID。@TomMD:我认为就问题提问没有任何问题。@all-oops。不知何故,我完全错误地将这个问题理解为“如何阻止进程存在”,在这个问题下,你可能会更好地理解我的困惑:-)。这是我见过的最好的答案。我想知道为什么bash的内置版本wait只在它是当前shell的子进程时才起作用。@B Johnson:因为它采用的作业ID只在当前shell中有效,而不是PID。作业控制的工作方式可能还有其他内部原因。kill-0${PID}是首选方式。因为它只使用一个简单的系统调用,所以它是可移植且快速的。
while ps -p $PID >/dev/null 2>&1; do :; done