【问题标题】:Kill a process and wait for the process to exit杀死一个进程并等待进程退出
【发布时间】:2013-07-27 12:18:00
【问题描述】:

当我从我的 bash 脚本启动我的 tcp 服务器时,我需要在当前实例开始侦听之前终止前一个实例(它可能仍在侦听同一个端口)。

我可以使用pkill <previous_pid> 之类的东西。如果我理解正确,这只是将SIGTERM 发送到目标pid。当pkill 返回时,目标进程可能还活着。有没有办法让pkill 等到它退出?

【问题讨论】:

  • 你能在Unix & Linux网站上提出同样的问题吗?
  • 这是我的解决方案,也适用于服务:pastebin.com/VjpVNdz2
  • 为什么这是“离题”?这是一个与 bash 编程语言相关的编程问题。
  • 很遗憾,基本需求到现在都没有解决。我猜有几千个脚本实现了这个简单的功能:杀死并等待进程终止。如何改变现状?如何达到目标?

标签: linux bash unix process kill-process


【解决方案1】:

没有。你可以做的是用kill -0 $PID 编写一个循环。如果此调用失败 ($? -ne 0),则进程已终止:

while kill -0 $PID; do 
    sleep 1
done

(感谢qbolec 获取代码)

相关:

【讨论】:

  • 将其更改为while $(kill -0 $PID 2>/dev/null); do 以在进程被杀死后忽略“没有这样的进程”消息
【解决方案2】:

使用wait(内置bash)等待进程完成:

 pkill <previous_pid>
 wait <previous_pid>

【讨论】:

  • 等待说“不是这个shell的pid”,我不得不while ps -p $nPid; do sleep 1;done;
  • −1: wait 仅适用于 当前 shell 的子进程,而不适用于任意进程。对此没有通用的内置机制。
  • 为什么不使用kill
猜你喜欢
  • 2021-12-06
  • 2017-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多