¿Qué es un proceso zombie?
Un proceso zombie es una instancia de un programa de computadora que conserva un registro de la tabla de proceso a pesar de haber terminado de ejecutarse. Los procesos inactivos como estos generalmente están asociados con Unix® y otros sistemas operativos similares debido a la forma en que manejan los procesos secundarios. Cuando un proceso secundario ha terminado de ejecutarse, el padre generalmente es responsable de eliminarlo de la tabla de procesos. Por lo general, no es posible eliminar directamente un proceso zombie con el comando kill, aunque a menudo se puede hacer que el padre lo elimine si el operador utiliza la notificación de señal secundaria (SIGCHLD). De lo contrario, un proceso zombie puede eliminarse indirectamente matando al padre.
El proceso zombi es un término descriptivo metafórico que hace referencia a los muertos vivientes. Los procesos inactivos en Unix® y sistemas operativos similares pueden verse como análogos a los zombis en el sentido de que mantienen una presencia en la tabla de procesos a pesar de que ya no realizan sus funciones previstas. Cuando un proceso ha terminado de ejecutarse, a veces se dice que ha muerto, mientras que el medio por el cual el sistema operativo recupera su asignación de la tabla de procesos puede conocerse como cosecha. El proceso padre de un zombie técnicamente se supone que cosechará a sus hijos, aunque esto no siempre sucede.
Hay ciertos casos en los que la existencia de un proceso zombie puede ser intencional o incluso deseada. Después de que un proceso secundario haya dejado de ejecutarse, el padre puede necesitar ejecutar otra instancia del mismo programa más adelante. Si no se ha eliminado un zombi de la tabla de proceso, no se le asignará a un nuevo hijo la misma identificación (ID) que al niño anterior. Ciertos programas pueden beneficiarse o incluso requerir este tipo de diferenciación.
Si un proceso padre no ha ejecutado el comando de espera para cosechar zombis de los que es responsable, puede ser posible forzar el problema. Esto normalmente se realiza mediante el comando kill y enviando la señal SIGCHLD al proceso padre. Si todo funciona correctamente, un proceso principal que recibe esta señal debe cosechar a sus hijos zombis para que sus ID y posiciones de la tabla de proceso puedan reutilizarse.
Bajo ciertas circunstancias, un proceso padre puede ignorar la señal SIGCHLD. Si esto ocurre y el operador aún desea que se borre la tabla de procesos, el proceso principal puede ser eliminado. Cualquier zombie que haya creado el proceso padre será asignado como hijo al proceso init. Dado que init inicia periódicamente el comando de espera en sus hijos, los zombis de los que es responsable serán eliminados de la tabla de procesos.