Re: Procesos defunct y como evitarlos
El 05/07/11 14:17, Juan Antonio escribió:
> El 05/07/11 14:08, fernando sainz escribió:
>> El día 5 de julio de 2011 12:47, jmramirez (mas_ke_na)
>> <mas_ke_na@hotmail.com> escribió:
>>> -----BEGIN PGP SIGNED MESSAGE-----
>>> Hash: SHA1
>>>
>>> Marc Aymerich escribió:
>>>> 2011/7/5 ZorroPlateado <i32lelor.debian@gmail.com
>>>> <mailto:i32lelor.debian@gmail.com>>
>>>>
>>>> Tengo en Debian una instalación de Alfresco, el caso es que tengo un
>>>> script
>>>> para backups ejecutado desde cron, este script de backup para Mysql
>>>> y Alfresco
>>>> y luego copia sus archivos, posteriormente inicia los dos servicios.
>>>>
>>>> El caso es que el orden de los scripts bash ejecutados es el siguiente:
>>>>
>>>> /etc/init.d/alfresco start
>>>> ||
>>>> ||
>>>> ===> /mnt/almacen/alfresco/alfresco.sh start
>>>> ||
>>>> ||
>>>> ===>
>>>> /mnt/almacen/alfresco/tomcat/bin/catalina.sh
>>>>
>>>>
>>>> Pues bien el script backup usar /etc/init.d/alfresco/ start|stop . Y en
>>>> alfresco.sh encontramos un `nohup catalina.sh`.
>>>>
>>>> El script de backup se ejecuta entero y alfresco es inciado sin
>>>> problemas,
>>>> recibo el email del cron con toda la ejecución. El problema está en
>>>> que el
>>>> proceso de backup aparece como defunct ya que es padre del proceso
>>>> java de
>>>> alfresco que hasta que no termine no cierra el proceso de backup.
>>>>
>>>> He lido que el proceso defunc no consume recursos y solo existe
>>>> mientras el
>>>> proceso hijo no termine, con lo cual no deberia de ser ningun problema.
>>>>
>>>> Pero pregunto, ¿se puede hacer que en la llamada al script
>>>> catalina.sh su
>>>> proceso padre sea por ejemplo init y de este modo el backup termine?
>>> Buenas
>>>
>>> Justo ayer lei un post [1] sobre algo parecido que lo mismo te puede
>>> valer, basicamente es poner en tu script la llamada a este con el nombre
>>> del proceso. Creo que es un apaño que te puede valer, aunque lo suyo
>>> seria saber porque se queda zombie e intentar solucionarlo.
>>>
>>> [1] http://www.elsotanillo.net/content/view/50/1/lang,es/
>>>
>>> Un saludo y espero que sirva este apaño.
>>>
>>> PD: La web es de alguien de la lista (no recuerdo quien), lo mismo te
>>> puede aportar mas datos.
>> Como ya te han contestado ya existe un programa "mataprocesos"
>> killall, pero aquí están hablando de procesos zombie, que ya no se
>> están ejecutando y no consumen recursos.
>>
>> Se producen cuando no se captura la señal de muerte de los hijos y la
>> forma de arreglarlo es haciendo bien los programas.. :-)
>>
>>
>> Saludos.
>>
>>
> Bueno, siempre puedes hacer una maña como poner al final del script
>
> ps -e -ostat,ppid,pid,cmd | grep '^Z' | awk '{print $2}' | xargs kill -HUP
>
> me parece mas fácil y sobre todo mas límpio que el script de la web que
> han sugerido, al enviarle SIGHUP en vez de SIGKILL
>
>
Corrijo
ps -e -ostat,ppid,pid,cmd | grep '^Z' | awk '{print $2}' | xargs kill -HUP
por
ps -e -ostat,ppid,pid,cmd | awk '/^Z/ {print $2}' | xargs kill -HUP
el clásico error de cat | grep
Un saludo.
Reply to: