Proceso activo

Antonio Beamud Montero antonio.beamud en linkend.net
Dom Nov 18 23:37:28 CET 2007


El sáb, 17-11-2007 a las 09:02 -0500, Juan Carlos Villalobos C escribió:
> ----- Original Message ----- 

> Se trata de un hosting en un proveedor cualquiera, tengo acceso via cron
> para lanzar procesos en python.
> Ahora, quiero programar un cron para que se ejecute cada hora, pero si al
> ejecutarse, detecta que ya esta en ejecución, no siga ejecutandose y se
> termine, quedando el que ya estaba. Pero si por cualquier razon el proceso
> no esta, si continue.
> 
> Hasta ahora encontre dos metodos para ver si un proceso esta en ejecución o
> no.
> - Uno por medio de bloquear un archivo, el caso es que no logre hacer esto
> con los codigos q consegui, no me funciono.
> - Por medio del PID, pero no he conseguido saber desde python como
> veririficar si un proceso con determinado PID esta activo.
> 
> Así que esa seria la cuestion, desde python como saber si un proceso con un
> determinado PID esta en ejecución?
> 
> Muchas gracias

Una manera podría ser, que la aplicación escribiese una fichero de
candado (un lock). Si al ejecutar una segunda vez la aplicación detecta
que el candado está puesto, sale, sino, pone ella el candado y continua.
Puedes usar timeouts sobre la fecha de modificación del candado, para
que si la aplicación muere repentinamente sin haberle dado tiempo a
quitar el candado, las sucesivas ejecuciones no se queden
indefinidamente en ese estado, así puedes poner que si el candado tiene
más de x tiempo, lo borro, pongo el mio y continuo la ejecución, por
ejemplo usando os.path.getmtime(lockfile). 

Otra opción, sería usando el pid, o bien ejecutas un ps y parseas la
salida en busca del pid del proceso mirando su estado, o bien sacas la
información del proc, si por ejemplo el pid que buscas es el 16337,
puedes leer el fichero /proc/16337/status, y ahí te aparece el estado
del proceso en ese preciso instante:

State:  S (sleeping)

Solo con la llamada os.path.exists('/proc/16337'), te dice si el proceso
está en la tabla de procesos o no, con lo que si no está, seguro que no
está en ejecución ;)

Espero que te sirva.


------------ próxima parte ------------
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes


Más información sobre la lista de distribución Python-es