Problema con cron y proceso zombie

Hola a todos,

Hoy en el trabajo hemos estado teniendo problemas con un programa que se lanza desde el cron, y la verdad es que he estado mirando y no encuentro cual puede ser el problema.

A ver si a alguno de vosotros os suena un problema parecido, os lo indico con scripts muy simples (también he probado con esos y también falla):

Tenemos 2 scripts:

p1.sh
#!/bin/bash

/home/prueba/p2.sh


p2.sh
#!/bin/bash

sleep 50000 &


y en el cron ponemos esto:
10 * * * * /home/prueba/p1.sh


Bien, pues el script se ejecuta correctamente y lanza "sleep" en segundo plano, quedando el padre de "sleep" el proceso 1 (init). Sin embargo aparece un proceso zombie de p1.sh (de p2.sh no), y ese proceso zombie no desaparece hasta que termine o mate al "sleep".

He probado en una máquina Tru64 y no ocurre eso, en Ubuntu tampoco. Pero en la que estamos usando, un Red Hat Enterprise 4 x86_64 sí que ocurre. No se si es que se me está escapando algo o es algún bug, pero aunque fuera un bug, no le veo el sentido. ¿Alguien me puede explicar que está pasando?.

Gracias.
¿Y el problema es?

A mi me parece un comportamiento de lo más normal.

- ferdy
Ya te digo que seguro que es algo que se me está pasando por alto, pero no lo veo. Además como digo en Ubuntu o un Tru64 que he probado no se queda ningún proceso zombie, solo el "sleep" funcionando.

p1.sh se queda zombie, sin embargo p2.sh termina correctamente, y el "sleep" se queda ejecutandose en segundo plano y pasa a ser hijo de init.

¿Por qué p1.sh se queda zombie si además p2.sh ha terminado sin problemas? por lo que entiendo "crond" estaría haciendo por sus hijos, en este caso "p1.sh", sin embargo aunque termina no parece que "crond" llegue a hacer el "wait".
¿por qué no usas exec para invocar a p2 desde p1?
sí, en el ejemplo ese tan simple podría poner "exec", pero en los scripts reales después de llamar a "p2" hace alguna cosilla más, entonces no valdría con "exec". ;)
La pregunta es.... ¿dónde está el problema? ese comportamiento es perfectamente _normal_ . ¿Por qué te preocupa TANTO tener un proceso zombie? ¿Realmente sabes qué es un proceso zombie?

- ferdy
Ferdy escribió:La pregunta es.... ¿dónde está el problema? ese comportamiento es perfectamente _normal_ . ¿Por qué te preocupa TANTO tener un proceso zombie? ¿Realmente sabes qué es un proceso zombie?

- ferdy


Lo que quiero saber es porque en los otros Unix no se crea ese proceso zombie y sin embargo en ese Red Hat sí.

Un proceso zombie por lo que se es un proceso que no ocupa ni CPU, ni memoria ni nada, tan solo un "slot" de proceso y se produce porque un proceso hijo ha terminado y sin embargo su padre sigue existiendo y no hace "wait" por ese hijo.

Es más que nada curiosidad por saber porque se comporta diferente. Según lo entiendo yo en ese caso no se debería quedar el proceso zombie, "p1.sh" termina su ejecución y lo que me parece raro es que el "crond" no haga "wait" por él. Si estoy equivocado en algo, por favor, dimelo.

Problema realmente no es, bueno, los administradores de la máquina dicen que no quieren ver ningún proceso zombie, así que tendremos que cambiarlo, y no se les puede llevar la contraria. Pero eso ya es lo de menos, es que tengo curiosidad de saber porque el comportamiento es diferente. Precisamente nos hemos dado cuenta que pasa eso porque se quejaron los administradores al pasar esos scripts de Tru64 a Red Hat.
6 respuestas