【问题标题】:how can a process be killed with all its childern如何杀死一个进程及其所有子进程
【发布时间】:2016-09-07 14:19:38
【问题描述】:

我有一种情况,一个 xterm 运行另一个 xterm,它运行一个进程。 我想设置某种看门狗并在进程卡住的情况下杀死所有这些窗口。

我正在使用 Ruby 来执行此操作。当第一个 xterm 打开时,我得到它的 PID,然后当一个 SIGTERM 发送给它时,只有第一个 xterm 窗口死亡,但不是第二个。

在irb中可以很容易地复制:

irb(main):002:0> cmd = "xterm -e xterm -e sleep 1000"
=> "xterm -e xterm -e sleep 1000"
irb(main):003:0> pid = Process.spawn(cmd)
=> 669
irb(main):004:0> Process.kill(15, 669)
=> 1

这会使第二个 xterm 窗口保持打开状态。怎样才能杀死所有的进程链?

谢谢

【问题讨论】:

    标签: ruby linux process


    【解决方案1】:

    使用ps xfpstree,您可以动态查看正在运行的进程层次结构。

    我使用strace 来跟踪这些程序的行为。原来他们正在检查/proc/$pid/stat/proc/$pid/status 的内容,这会告诉他们进程的父进程是谁。

    您可能必须寻找父 PID 等于您获得的 PID(或该进程的 PPID)的进程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多