Должна ли у группы процессов быть работающий руководитель процесса?

В Unix-подобных операционных системах, если процесс ' pid И его pgid равны, то процесс является лидером группы процессов.

Однако, если лидер процесса вышел, а другие процессы в той же группе все еще работают, кто является последующим процессом лидера?

1 ответ

Решение

Последующего лидера не существует: как только выходит лидер группы процессов, группа теряет лидерство. Ничто не требует, чтобы у группы процессов был лидер, прекрасно, что у него нет лидера, и вы все равно можете посылать сигналы каждому элементу в группе с помощью kill(2),

Что именно происходит при выходе лидера, зависит от состояния процессов в группе и от того, классифицирует ли группа как потерянную группу процессов.

Сначала посмотрим, что такое группа-сирота.

POSIX определяет потерянную группу процессов как группу, в которой родительский процесс каждого процесса, принадлежащего этой группе, является либо членом этой же группы, либо частью другого сеанса.

Другими словами, группа процессов не теряется, если хотя бы один процесс в группе имеет родителя в другой группе процессов, но в том же сеансе.

Поначалу это определение может показаться странным, но за этим есть обоснование, которое (надеюсь) станет ясным через мгновение.

Так почему так важно знать, является ли группа сиротами? Из-за процессов, которые остановлены. Если группа процессов осиротела, и в этой группе есть как минимум один процесс, который остановлен (например, он был приостановлен с помощью SIGSTOP или же SIGTSTP), то POSIX.1 требует отправки каждого процесса в потерянной группе SIGHUP с последующим SIGCONT, Причина этого состоит в том, чтобы избежать остановки процесса навсегда: рассмотрим случай, когда лидер сеанса и лидер группы процессов завершают работу, и группа остается с остановленным процессом. Поскольку родитель находится в другом сеансе, у него нет разрешения на его отправку. SIGCONTпоэтому процесс никогда не запустится снова.

OTOH, если родитель находится в том же сеансе, но в другой группе, то есть вероятность, что он будет сигнализировать об остановленном процессе с SIGCONTтаким образом, группа не считается осиротевшей и нет необходимости принудительно пробуждать остановленные процессы.

Другие вопросы по тегам