【问题标题】:Is there a linux command to block until a process exits?是否有一个 linux 命令可以阻止直到进程退出?
【发布时间】:2011-05-07 12:42:35
【问题描述】:

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

【问题讨论】:

  • 我知道就这个问题提出问题是不公平的,但是......你怎么知道一个尚未创建的进程的 PID? PID 可以是相当随机的。当然,实际上它们是线性分配的,但您不知道在时间 AB 之间将启动多少进程,或者 PID 计数器是否会换行。
  • @TomMD 也许他在运行时使用pidof 来查找进程的PID,或者其他什么。有一百种不同的方法他可以获得进程的 PID,而不是在 shell 脚本中硬编码;)
  • @TomMD 我知道 PID 因为我知道进程名,我可以使用 ps 命令获取 PID。
  • @TomMD:我认为就问题提出问题没有任何问题。
  • @all - 哎呀。不知何故,我将这个问题完全误解为“如何阻止直到进程存在”,在这个问题下你可能会更好地理解我的困惑:-)。

标签: linux bash csh


【解决方案1】:
while ps -p $PID >/dev/null 2>&1; do sleep 1; done

while ps -p $PID >/dev/null 2>&1; do :; done

【讨论】:

  • 这是我见过的最好的答案。我想知道为什么 bash 的内置版本 wait 仅在它是当前 shell 的子进程时才有效。
  • @B Johnson:因为它需要一个仅在当前 shell 中有效的作业 ID,而不是一个 PID。作业控制的工作方式可能还有其他内部原因。
【解决方案2】:

这不是一个非常巧妙的方法,但您可以不断地向指定的 pid 发出kill(2) 系统调用,将零作为信号。第一次kill 不成功,将errno 设置为ESRCH,你可以断定进程已经退出。

【讨论】:

  • kill -0 ${PID} 是首选方式。由于只使用一个简单的系统调用,因此可移植且快速。
【解决方案3】:

您可以检查目录 /proc/PID 是否存在。这似乎比发送多个信号更干净

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多