SIGCHLD

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 13 de marzo de 2013; las comprobaciones requieren 10 ediciones .
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.

Etimología

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 ).

Uso

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).

Procesos zombis

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

Notas

  1. microHOWTO: Recolectar procesos zombis usando un controlador SIGCHLD . www.microhowto.info. Consultado el 4 de mayo de 2016. Archivado desde el original el 10 de mayo de 2016.