- SIGCHLD
-
SIGCHLD Описание: Состояние дочернего процесса изменилось По умолчанию: игнорируется коды SA_SIGINFO CLD_EXITEDнормальное завершение CLD_KILLEDаварийное завершение (без дампа памяти) CLD_DUMPEDаварийное завершение с дампом памяти CLD_TRAPPEDзавершен отладочной ловушкой CLD_STOPPEDостановлен CLD_CONTINUEDвыполнение продолжено после остановки В POSIX-системах SIGCHLD — сигнал, посылаемый при изменении статуса дочернего процесса (завершен, приостановлен или возобновлен).
SIGCHLD — целочисленная константа, определенная в заголовочном файле
signal.h. Символьные имена сигналов используются вместо номеров, так как в разных реализациях номера сигналов могут различаться.Этимология
SIG — общий префикс сигналов, CHLD — сокращенное написание англ. child — ребенок, дочерний объект (английский компьютерный жаргон).
Использование
В Unix процесс может порождать «дочерние» процессы системным вызовом
fork()или его вариантами. Родительский процесс, если он существует, уведомляется системой о завершении дочерних процессов (или изменении их состояния) сигналом SIGCHLD. Родительский процесс не должен предпринимать для этого никаких действий. Сигнал может быть игнорирован, если не нуждается в обработке (по умолчанию он игнорируется).Процессы-зомби
Дочерний процесс по завершении становится «зомби» — пустой записью в таблице процессов, хранящей информацию о завершенном процессе (точнее — код завершения) - до тех пор, пока родительский процесс не получит эту информацию с помощью системного вызова
wait()или не завершится сам.В короткоживущих программах наличие «зомби» вполне нормальное явление — зомби не занимают много ресурсов и исчезают с завершением родительского процесса. Но аккуратные программисты всегда заботятся об обработке «зомби». В общем случае для предотвращения накопления «зомби» программа должна использовать обработчик сигнала SIGCHLD c вызовом
wait().В Perl-е установка
$SIG{'CHLD'}="IGNORE"на самом деле устанавливает обработчик с обработкой процессов-зомби, как описано выше.
Python при
signal.signal(signal.SIGCHLD, signal.SIG_IGN)делает то же самое.
Сигналы POSIX SIGABRT | SIGALRM | SIGFPE | SIGHUP | SIGILL | SIGINT | SIGKILL | SIGPIPE | SIGQUIT | SIGSEGV | SIGTERM | SIGUSR1 | SIGUSR2 | SIGCHLD | SIGCONT | SIGSTOP | SIGTSTP | SIGTTIN | SIGTTOU | SIGBUS | SIGPOLL | SIGPROF | SIGSYS | SIGTRAP | SIGURG | SIGVTALRM | SIGXCPU | SIGXFSZ | Сигналы реального времени (определяемые пользователем) — SIGRTMIN — SIGRTMAX.
Некоторые сигналы не включенные в POSIX и синонимы SIGIOT | SIGEMT | SIGSTKFLT | SIGIO | SIGCLD | SIGPWR (SIGINFO) | SIGLOST | SIGWINCH | SIGUNUSED Категория:- Сигналы POSIX
Wikimedia Foundation. 2010.