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 |