SIGCHLD
En plataformas compatibles con POSIX, SIGCHLD es la señal enviada a un proceso cuando uno de sus procesos hijos termina. En el código fuente, SIGCHLD es una constante simbólica definida en el archivo de cabecera <signal.h>
. Se usan nombres simbólicos de señales porque los números de las señales puede variar de una plataforma a otra.
SIGCHLD | ||
---|---|---|
Descripción | El proceso hijo terminado o parado | |
Acción por defecto | Ignorar la señal | |
SA_SIGINFO macros | ||
CLD_EXITED | el proceso hijo ha ejecutado un exit | |
CLD_KILLED | el proceso hijo ha terminado anormalmente y no ha creado un archivo de volcado de memoria | |
CLD_DUMPED | el proceso hijo ha terminado anormalmente y ha creado un archivo de volcado de memoria | |
CLD_TRAPPED | el rastreo del proceso hijo ha sido interceptado | |
CLD_STOPPED | el proceso hijo se ha parado | |
CLD_CONTINUED | el proceso hijo que estaba parado ha continuado | |
En Linux, SIGCLD es un sinónimo de SIGCHLD.
Etimología
editarSIG es un prefijo común para nombres de señales. CHLD y CLD son abreviaciones de child, hijo en inglés.
Uso
editarEn Unix, un proceso puede tener hijos, creados mediante fork o llamadas de sistema similares. Cuando el hijo termina, se envía una señal SIGCHLD al padre. Por defecto, la señal se ignora y se crea un proceso zombie.[1] El padre debe instalar un manejador de señales para actuar sobre la señal. En algunas plataformas Unix, se pueden evitar los zombis explícitamente ignorando la señal SIGCHLD.[2] Esto se muestra en varios lenguajes en la siguiente tabla. Sin embargo, instalar un manipulador de señales para SIGCHLD y llamar a wait es la mejor manera de evitar zombis conservando la portabilidad.
Lenguaje | Sintaxis |
---|---|
C | signal(SIGCHLD, SIG_IGN);
|
Perl | $SIG{'CHLD'}="IGNORE";
|
Python | signal.signal(signal.SIGCHLD, signal.SIG_IGN)
|
PHP | pcntl_signal(SIGCHLD, SIG_IGN);
|
Referencias
editar- ↑ Advanced Programming in the UNIX Environment - W. Stevens
- ↑ perlipc - perldoc.perl.org (en inglés)