Procés zombi
Aquest article o secció no cita les fonts o necessita més referències per a la seva verificabilitat. |
Un procés zombi en sistemes operatius Unix i similars, (zombie process o defunct process) és un procés que ha completat la seva execució però que encara té una entrada a la taula de processos. Aquesta entrada és encara necessària per a permetre que el procés que va engegar el que ara és zombi n'obtingui l'estat d'acabament. El terme procés zombi deriva de la definició comú de zombi (una persona no-morta). Seguint amb la metàfora, el procés fill ha mort però no ha estat enterrat.
Quan un procés acaba, tota la memòria i els recursos associats amb ell són alliberats, pel que poden ésser usats per altres processos. De totes maneres, l'entrada corresponent al procés a la taula de processos segueix existint. El procés pare pot obtenir la condició de finalització del fill emprant la crida al sistema wait, moment en què s'eliminarà el procés zombi. La crida al sistema wait es pot executar des d'un codi seqüencial, però normalment s'executa en el gestor del senyal SIGCHLD, que el procés pare rep quan mor un dels seus fills.
Després d'eliminar el procés zombi de la taula de processos, el seu ID de procés i la seva entrada a la taula poden ésser reutilitzats. Però si un procés pare no cridés a wait o es produís un error, el procés zombi es quedaria a la taula de processos. Hi ha algunes situacions en què això pot resultar interessant. Per exemple, si el pare ha de crear un altre procés fill, d'aquesta manera s'asseguraria que no se li assignés el mateix ID. Com a cas especial, a Linux, si el pare ignora explícitament el senyal SIGCHLD (posa com a gestor SIG_IGN en lloc d'ignorar el senyal, tal com es fa per defecte), tota la informació de sortida dels processos fills serà descartada i no es crearan processos zombi.
Un procés zombi no és el mateix que un procés orfe. Un procés orfe és un procés que està encara en execució, però que el seu pare ha mort. En lloc de convertir-se en un procés zombi, aquest fill serà adoptat per init (ID de procés 1), que fa waits sobre els seus fills.
Els zombis poden ésser identificats a la sortida de la comanda d'Unix ps per la presència d'una "Z" a la columna STAT. Els zombis que existeixen durant més d'un breu període solen indicar una falla (un bug) al programa pare. Tal com succeeix amb altres pèrdues, la presència d'uns quants zombis no és preocupant, però pot indicar un problema que serà seriós sota grans càrregues del sistema. Donat que no hi ha memòria reservada per als processos zombis, sinó només una entrada a la taula de processos, el principal problema degut a l'existència de molts processos zombi no és l'esgotament de la memòria, sinó el que s'acabin els ID disponibles per als processos.
Per a eliminar zombis d'un sistema, es pot enviar el senyal SIGCHLD manualment al procés pare mitjançant la comanda kill. Si, tot i això, el procés pare no els enterra convenientment, caldrà eliminar el procés pare. Quan un procés perd el seu pare, init esdevé el seu nou pare. init executa periòdicament la crida al sistema wait per a enterrar qualsevol procés zombi que el tingui com a pare.