Должна ли у группы процессов быть работающий руководитель процесса?
В Unix-подобных операционных системах, если процесс ' pid
И его pgid
равны, то процесс является лидером группы процессов.
Однако, если лидер процесса вышел, а другие процессы в той же группе все еще работают, кто является последующим процессом лидера?
1 ответ
Последующего лидера не существует: как только выходит лидер группы процессов, группа теряет лидерство. Ничто не требует, чтобы у группы процессов был лидер, прекрасно, что у него нет лидера, и вы все равно можете посылать сигналы каждому элементу в группе с помощью kill(2)
,
Что именно происходит при выходе лидера, зависит от состояния процессов в группе и от того, классифицирует ли группа как потерянную группу процессов.
Сначала посмотрим, что такое группа-сирота.
POSIX определяет потерянную группу процессов как группу, в которой родительский процесс каждого процесса, принадлежащего этой группе, является либо членом этой же группы, либо частью другого сеанса.
Другими словами, группа процессов не теряется, если хотя бы один процесс в группе имеет родителя в другой группе процессов, но в том же сеансе.
Поначалу это определение может показаться странным, но за этим есть обоснование, которое (надеюсь) станет ясным через мгновение.
Так почему так важно знать, является ли группа сиротами? Из-за процессов, которые остановлены. Если группа процессов осиротела, и в этой группе есть как минимум один процесс, который остановлен (например, он был приостановлен с помощью SIGSTOP
или же SIGTSTP
), то POSIX.1 требует отправки каждого процесса в потерянной группе SIGHUP
с последующим SIGCONT
, Причина этого состоит в том, чтобы избежать остановки процесса навсегда: рассмотрим случай, когда лидер сеанса и лидер группы процессов завершают работу, и группа остается с остановленным процессом. Поскольку родитель находится в другом сеансе, у него нет разрешения на его отправку. SIGCONT
поэтому процесс никогда не запустится снова.
OTOH, если родитель находится в том же сеансе, но в другой группе, то есть вероятность, что он будет сигнализировать об остановленном процессе с SIGCONT
таким образом, группа не считается осиротевшей и нет необходимости принудительно пробуждать остановленные процессы.