Un proceso puede terminar al volver de su función principal, llamar a una interfaz de salida o ser finalizado por una señal. El kernel libera la mayoría de sus recursos, pero la contabilidad entre padre e hijo continúa hasta que el padre recoge la información de terminación.
Procesos · Lección 5
Terminación de procesos
Aprende cómo el estado de salida, la espera, los zombis y la reasignación de padre completan el ciclo de vida de un proceso de Linux.
Estado de salida
Un programa que termina normalmente proporciona un estado entero. Por convención, el estado 0 significa éxito y un valor distinto de cero comunica algún tipo de fallo o resultado alternativo. El significado exacto de los valores no nulos forma parte de la interfaz del programa.
En un shell, consulta el estado de la tubería en primer plano más reciente con:
$ command
$ printf '%s\n' "$?"
Los shells exponen un intervalo codificado limitado y también representan la terminación mediante señales, por lo que este valor no es un registro diagnóstico completo. Los programas deben documentar sus propios códigos de salida.
Según la convención de Unix, ¿qué estado de salida normal indica éxito?
Esperar y recoger
El kernel registra cómo terminó un hijo y avisa a su padre. El padre usa una función de la familia de llamadas al sistema wait() para recuperar esa información. La recogida del registro se denomina reaping.
La espera también puede coordinar la ejecución: un shell espera a que termine una orden en primer plano antes de mostrar otro indicador, mientras que puede aplazar la espera de un trabajo en segundo plano. Un padre de larga duración bien diseñado debe organizar la recogida de hijos sin bloquear trabajo no relacionado.
¿Qué permite recuperar al padre una operación de espera correcta?
Procesos zombis
Después de que un hijo termina, pero antes de que se recoja su registro de terminación, aparece como zombi, a menudo con el estado Z en ps. Ya no se ejecuta ni conserva un espacio de direcciones normal, pero permanecen una entrada mínima en la tabla de procesos y datos contables.
Enviar una señal a un zombi no puede hacer que termine de nuevo. Para resolver una acumulación persistente, diagnostica el padre que no está esperando, reinicia o corrige ese padre mediante un procedimiento operativo apropiado o permite su reasignación a un proceso que lo recoja. Una gran cantidad puede agotar la capacidad de PID o de la tabla de procesos.
¿Qué descripción corresponde a un proceso zombi?
Huérfanos y reasignación de padre
Si un padre termina mientras su hijo continúa, el kernel reasigna ese hijo a un subreaper apto o al proceso init del espacio de nombres PID correspondiente. El hijo puede estar en ejecución, dormido, detenido o convertirse después en zombi; «huérfano» describe la pérdida de la relación con el padre original, no un estado de ejecución concreto.
El proceso adoptante pasa a ser responsable de recoger el estado de terminación. Los gestores de servicios y entornos de contenedores modernos hacen importante no suponer que el padre nuevo siempre es el PID 1 del host.
¿Qué ocurre cuando un proceso sobrevive a su padre original?
Usa el laboratorio Gestionar y supervisar procesos de Linux para observar códigos de salida y estados de procesos sin alterar una carga de producción.
Lección completada
Has completado Terminación de procesos
Ahora puedes distinguir el final de la ejecución de la limpieza que realiza el padre.
Interpreta cero como éxito convencional y los estados no nulos según la documentación del programa.
Usa la espera para recoger la información de terminación de un hijo.
Reconoce un zombi como un proceso terminado pero no recogido.
Reconoce un huérfano como un hijo reasignado después de que termine su padre original.
Guarda tu progreso
Crea una cuenta gratuita para guardar esta lección y continuar en cualquier dispositivo.
Crear una cuenta gratuita