Killing process group safely

How can one kill a process group safely, and force kill if needed?

The goal is to do a kill with SIGTERM (-15) then if the apps in the tree do not die after a timeout (e.g. 60 seconds) do a SIGKILL (-9).

We have a scenario with parent process and a child process, sharing a pgid, E.g

Parent Process pid=123, pgid=123
|- Child Process pid=456, pgid=123

Currently we are sending the SIGTERM (-15) to the process group, then if the parent process is dead, then assume success.

However, sometimes we found that the parent process dies, and the child process does not die.

So this boils down to two questions:

  1. Why does the parent pid die if the child does not die (is this possible, or are my assumptions wrong)?

  2. Would checking to see if there are any processes in the process group be the best way to make sure all the processes in the tree are dead before sending the kill -9 to the process group?

1
задан 2 August 2017 в 18:53
1 ответ
  1. Родитель должен явно ждать() своих дочерних детей, если ему небезразлично их состояние завершения. По умолчанию дети-сироты переводятся в init (pid1) и не прекращаются.
  2. К сожалению, когда они усыновляются init, их pgid меняется на их собственный pid (сирота становится их собственной сессией и pg-лидером).

Если вы хотите быть уверены, вам нужно сделать список всех PID в pg, а затем провести опрос, чтобы убедиться, что они умерли. Сама группа процессов распускается, когда лидер умирает, так что вы не можете контролировать процессы на этой странице.

Если вы действительно хотите быть уверены (потому что PIDs могут быть повторно использованы на очень занятых системах), вам нужно будет сделать глубокий обход дерева процессов от родителя к ребенку и убить узлы детского листа, ожидая, пока каждый из них не завершится, прежде чем убить следующего уровня, но вы можете столкнуться с родителями, отпугивающими своих мертвых детей. Скрипт в этого ответа на SO обрабатывает этот крайний случай.

.
0
ответ дан 4 December 2019 в 04:47

Теги

Похожие вопросы