SIGCHLD | |
---|---|
Descripción | El estado del proceso secundario cambió |
Defecto | ignorado |
Códigos SA_SIGINFO | |
CLD_EXITADO | terminación normal |
CLD_KILLED | bloqueo (sin volcado de memoria) |
CLD_DUMPED | bloqueo con volcado de memoria |
CLD_TRAPPED | terminó con una trampa de depuración |
CLD_DETENIDO | detenido |
CLD_CONTINUADO | la ejecución continuó después de la parada |
En los sistemas POSIX , SIGCHLD es una señal que se envía cuando cambia el estado de un proceso secundario (terminado, suspendido o reanudado).
SIGCHLD es una constante entera definida en el signal.h. Los nombres simbólicos de las señales se utilizan en lugar de los números, ya que los números de las señales pueden diferir en diferentes implementaciones.
SIG es un prefijo de señal común , CHLD es una ortografía abreviada en inglés. niño - niño, objeto niño ( jerga informática inglesa ).
En Unix, un proceso puede generar procesos "secundarios" con una llamada al sistema fork()o variaciones de los mismos. El sistema notifica al proceso principal, si existe, que los procesos secundarios han terminado (o su estado ha cambiado) con la señal SIGCHLD. El proceso principal no debe realizar ninguna acción para hacer esto. La señal se puede ignorar si no necesita ser procesada (se ignora por defecto).
El proceso secundario al finalizar se convierte en un "zombie", una entrada vacía en la tabla de procesos que almacena información sobre el proceso finalizado (más precisamente, el código de salida), hasta que el proceso principal recibe esta información mediante una llamada al sistema wait()o finaliza.
En los programas de corta duración, la presencia de "zombies" es bastante normal: los zombis no consumen muchos recursos y desaparecen con la finalización del proceso principal. Pero los buenos programadores siempre se encargan de manejar "zombis". En general, para evitar la acumulación de "zombis", el programa debe usar el controlador de señales SIGCHLD con una llamada wait(), pero esto no es necesario en absoluto, si el programa que llama no hace nada en el controlador SIGCHLD excepto esperar, simplemente puede establecer este controlador para SIG_IGN y los procesos zombis se recopilarán [1] automáticamente. Cabe señalar aquí que establecer SIGCHLD en SIG_IGN es compatible con POSIX.1-2001 y no con POSIX.1-1990.
Instalación de Perl _
$SIG{'CHLD'}="IGNORE"
en realidad establece un controlador con el manejo de procesos zombis como se describe anteriormente.
pitón en
signal.signal(signal.SIGCHLD, signal.SIG_IGN)
hace lo mismo
Señales POSIX | |||
---|---|---|---|
| |||
|