Из справочной системы пользователя kill (2):
Если pid отрицательный, но не -1, sig отправляется всем процессам (за исключением неуказанного набора системных процессов), идентификатор группы процессов которого равен абсолютному значению pid и для которого у процесса есть разрешение на отправку сигнал.
EDIT
(я прошу разъяснить здесь, но мне нужно пространство и форматирование, которые не доступны в области комментария)
Так pstree будет печатать:
startserv --- expect --- /bin/sh --- srcds_linux
И группировка групп будет:
{startserv --- expect} --- {/bin/sh --- srcds_linux}
И от startserv
вы хотите убить expect
, /bin/sh
и srcds_linux
, но убийство expect
не приводит к тому, что expect
убивает своего непосредственного ребенка (тем более группу, что этот ребенок является главой).
еще несколько предложений
Может быть, убийство ожидать с некоторым сигналом к тому SIGKILL
(9), таким как SIGTERM
может привести к expect
убить ее ребенок (и, возможно, группу) для вас перед завершением себя, но вы можете иметь уже пробовал это.
Забастовка, что вы можете попытаться просмотреть /proc/*/stat
, чтобы построить процессное дерево и найти свой процесс expect
(вы уже знаете его pid), а затем убить его и всех его детей. Это не идеально, поскольку он не является атомарным (/ bin/sh может разблокировать еще несколько детей или что-то еще), но если вы хотите попытаться поймать это, вы также можете отправить все процессы в этом поддереве SIGSTOP
, поскольку понимаете, что они под подошвой expect
, чтобы стабилизировать это дерево. Затем отправьте им все более сильное убийство, за которым последует SIGCONT
.
Более автоматический способ для достижения этой цели будет иметь startserv
создать psudoterminal для запуска expect
(и его потомков) на, а затем закрыть контрольный сторону psudoterminal и надеемся, что все эти программы умереть на SIGHUP
.
Убивает ли процесс 'expect' (6554 выше) убить своего ребенка (6555)? – bstpierre
Можете ли вы рассказать о том, как выполняется «ожидание»? Полный argv, с комментариями о типах файлов и что-то особенное о fork ... exec, которое происходит. – nategoose