2012-08-02 29 views
7

Me gustaría saber si un proceso se está ejecutando. NO QUIERO usar ningún comando del sistema (""). ¿Hay alguna función basada en C que le permita saber si un proceso se está ejecutando?¿Cómo puedo saber si un proceso se está ejecutando en C?

Me gustaría proporcionar el nombre del proceso y quiero saber si se está ejecutando.

Gracias,

+0

Creo que debe ser más específico sobre qué es exactamente lo que quiere hacer. ¿Conoces el pid o el nombre del proceso en cuestión? –

+0

Conozco el nombre del proceso, sí. – Kitcha

+0

Es posible que desee consultar esta pregunta relacionada: http://stackoverflow.com/questions/3667486/display-all-process-using-a-posix-function – rayd09

Respuesta

9

Claro, utilizar kill(2):

#include <sys/types.h> 
#include <signal.h> 

int kill(pid_t pid, int sig); 

Si sig es 0, entonces no se envía ninguna señal, pero la comprobación de errores se sigue realizando; esto se puede usar para verificar la existencia de una ID de proceso o ID de grupo de proceso.

Así que llame kill(pid, 0) en el identificador de proceso del proceso que desea comprobar y ver si se produce un error (ESRCH).

+0

Esta es una buena manera de verificar si tienes la identificación del proceso, pero él solo tiene el nombre del proceso. – cegfault

+0

@cegfault: Eso es verdad. Sin embargo, un nombre realmente no te dice "el proceso", ya que puede haber muchos procesos con el mismo nombre. Creo que la pregunta del OP carece de varios detalles importantes. –

+0

No hay un "nombre de proceso": 'execve (argv [0], NULL, NULL);' – wildplasser

0

Puede escanear el sistema de archivos /proc para todos los procesos en ejecución, y ver si la entrada cmdline coincide con la que desea para ese proceso en particular.

Sin embargo, hay una condición de carrera. El proceso puede morir después de que hayas decidido que se estaba ejecutando.

La forma segura de saber si su proceso aún se está ejecutando es ser el que inició el proceso. Luego, cuando muere un niño, obtendrá SIGCHLD y puede usar waitpid(-1,..) para averiguar qué niño murió.

2

En Linux, otra forma de hacerlo puede incluir examinar los contenidos del directorio /proc. Los directorios numerados son ID de proceso, mientras que los subdirectorios que contienen el archivo cmdline muestran el nombre del comando.

Por ejemplo, si /proc/1234/cmdline contiene el valor foo, entonces el proceso foo tiene un diámetro interior de 1234. Se puede asignar nombres a los PID de esta manera, el uso de las funciones de acceso a ficheros estándar en C. Ver proc(5) para más información.

Cuestiones relacionadas