¿Por qué la implementación de funciones del sistema en UNIX bloquea la señal SIGCHLD?
Debido a que el principio básico de la implementación de la función del sistema es usar la función fork para crear un proceso hijo, usar el proceso hijo para llamar a la función de ejecución y luego reemplazar el contenido del proceso hijo con el programa de destino. Si la señal SIGCHLD no está enmascarada, entonces si el proceso hijo se crea antes de llamar a la función del sistema, cuando la función del sistema se bifurca, la creación del proceso hijo enviará la señal SIGCHLD al proceso padre después de que finalice la función del sistema. la configuración del proceso principal para manejar la señal es Captar la señal y llamar a la función de espera en la función de manejo de señales, entonces, si el proceso principal está configurado para captar la señal y llamar a la función de espera en la función de manejo de señales, la función del sistema no podrá obtener el estado de respuesta correspondiente en función del estado de retorno del proceso hijo creado en su función. Recuerde que es una regla que el valor de retorno de una función del sistema debe ser el estado de retorno del proceso hijo creado en la función. Por lo tanto, para que el sistema obtenga el estado de retorno de un proceso hijo creado en una función del sistema, la señal SIGCHLD debe estar bloqueada.
Además, para garantizar que las funciones del sistema no causen otros problemas, las funciones del sistema también deben ignorar las señales SIGINT y SIGQUIT, lo que puede causar problemas si la función del sistema llama a un programa interactivo (como "ed ").