2016-09-07 1 views
2

У меня есть ситуация, когда один xterm запускает другой xterm, который запускает процесс. Я хотел бы установить своего сторожевого пса и убить все эти окна в случае застрявшего процесса.Как можно убить процесс со всем его childern

Я использую 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

Используя либо ps xf или pstree, вы можете динамически видеть иерархию запуска процессов.

Я использовал strace для отслеживания поведения этих программ. Оказалось, что они проверяют содержимое /proc/$pid/stat и /proc/$pid/status, которые дают им информацию о том, кто является родителем процесса.

Возможно, вам понадобятся процессы, родительский ПИД-код которых равен полученному PID (или PPID этого процесса).