Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有要阻止的linux命令,直到进程退出?_Linux_Bash_Csh - Fatal编程技术网

是否有要阻止的linux命令,直到进程退出?

是否有要阻止的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 或 我知道问一

这正是问题所要问的。此外,我所拥有的只是PID,我运行命令的shell不一定是最初调用进程的shell。有什么想法吗?

这不是一个很好的方法,但是您可以连续向指定的pid发出
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