一个过程如何被所有的孩子们杀死

时间:2016-09-07 14:19:39

标签: ruby linux process

我有一种情况,其中一个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窗口打开。如何杀死所有的流程链?

由于

1 个答案:

答案 0 :(得分:0)

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

我使用strace来跟踪这些程序的行为。结果他们正在检查/proc/$pid/stat/proc/$pid/status的内容,这些内容为他们提供了进程父母的信息。

您可能需要查找其父PID等于您获得的PID(或该进程的PPID)的进程。