Обработка сигналов SIGCHLD

В Unix, когда дочерний процесс в фоновом режиме завершается, он отправляет SIGCHLD сигнал родителю, чтобы сообщить ему, что он прекратил.

Происходит ли то же самое, даже если процесс был на переднем плане? Если так, это означает, что родитель просто проигнорирует это.

Это правильно? Или, если он находится на переднем плане, то сигнал вообще не отправляется?

2 ответа

Решение

Фон и передний план являются концепциями управления заданиями и являются частью оболочки. Они применяются к процессам и не влияют на то, какой процесс породил (исполнил) другой процесс.

Дочерний процесс является результатом вызова fork()-exec(). Ребенок получает родительский pid процесса, который выполнил вызов fork (). Это контекст сигнала SIGCHLD, родительский pid получает сигнал SIGCHLD. Не имеет значения, является ли дочерний процесс "передним планом" или "фоновым", только ppid имеет значение при выходе из процесса.

Нет такого понятия, как ребенок на переднем плане. Термин фоновый процесс используется для обозначения того, что мы в основном имеем дело с родительским процессом (который может создавать дочерние процессы, выполняющие часть его работы). Когда дочерний процесс завершается SIGCHLD всегда отправляется в родительский процесс. Однако родительский процесс обычно игнорирует это. Если родитель хочет иметь дело с выходом дочернего процесса или выполнить какое-либо действие только после выхода из дочернего процесса, он может использовать системный вызов wait() для получения статуса дочернего процесса.

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