2010-09-09 16 views
7

No puedo encontrar una buena manera de averiguar cuándo sale un proceso en Linux. ¿Alguien tiene una solución para eso?¿Cómo saber cuándo sale el proceso en Linux?

Uno que puedo pensar es verificar la lista de procesos periódicamente, pero eso no es instantáneo y es bastante caro (tiene que recorrer todos los procesos cada vez).

¿Hay una interfaz para hacer eso en Linux? Algo como waitpid, excepto algo que se puede usar de procesos no relacionados?

Gracias, Boda Cydo

+1

Escriba un programa C que fork() sy exec() s? –

+0

Buena sugerencia Dave. Voy a hacerlo de esa manera por ahora. – bodacydo

Respuesta

2

Tal vez se puede iniciar el programa junto con otro programa, el segundo haciendo lo que sea que quiere hacer cuando el primer programa se detiene, como el envío de una notificación etc.

Considere este ejemplo muy simple:

sleep 10; echo "finished" 

sleep 10 es el primer proceso, echo "finished" el segundo (aunque eco es por lo general un plugin cáscara, pero espero que se obtiene el p oint)

1

Si conoce el PID del proceso en cuestión, puede verificar si existe/proc/$ PID. Es una llamada relativamente barata stat().

+1

Eso no funciona. Puede haber una condición de carrera. – bodacydo

+0

De acuerdo en la condición de carrera. Los Pids se reciclan, por lo que solo con esta técnica, no hay garantía de que el proceso que se ejecuta bajo ese pid sea el proceso original. –

4

No puede esperar por un proceso no relacionado, solo niños.

Un método de votación más simple que la comprobación de la lista de procesos, si tiene permiso, puede utilizar la llamada al sistema kill(2) y "enviar" la señal 0.

Desde la página kill(2) hombre:

Si sig es 0, luego no se envía ninguna señal, pero aún se realiza la verificación de errores; Esto se puede utilizar para comprobar la existencia de un identificador de proceso o proceso ID grupo

2

Otra opción es tener el proceso de abrir un objeto IPC tal como un socket de dominio Unix; su proceso de vigilancia puede detectar cuándo se cierra el proceso, ya que se cerrará inmediatamente.

Cuestiones relacionadas