Обработка сигналов SIGCHLD - PullRequest
7 голосов
/ 24 марта 2012

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

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

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

Ответы [ 2 ]

14 голосов
/ 24 марта 2012

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

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

3 голосов
/ 24 марта 2012

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

...