我有一种情况,其中一个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窗口打开。如何杀死所有的流程链?
由于
答案 0 :(得分:0)
使用ps xf
或pstree
,您可以动态查看正在运行的流程层次结构。
我使用strace来跟踪这些程序的行为。结果他们正在检查/proc/$pid/stat
和/proc/$pid/status
的内容,这些内容为他们提供了进程父母的信息。
您可能需要查找其父PID等于您获得的PID(或该进程的PPID)的进程。