2011-03-28 27 views
10

¿Puede alguien decirme cómo verificar si un proceso de Unix con una identificación de proceso dada se está ejecutando dentro de un programa C.? Sé que puedo llamar a system() y usar el comando ps pero no quiero llamar al sistema().Verificar procesos en ejecución en C

+0

duplicado posible: http://stackoverflow.com/questions/3667486/display-all-process-using-a-posix-function –

+0

No es un duplicado. Esta pregunta se trata de buscar un ID de proceso * específico *, esa otra pregunta es sobre enumerar * todos * los procesos. (La excelente respuesta de Juliano no se aplicaría a esa otra pregunta.) – DevSolar

+0

@EdwinBuck considere la posibilidad de rescindir su respuesta correcta, si no totalmente portátil (en sistemas donde/proc esté disponible, proporcionaría acceso a información que podría ayudar a la desambiguación, y otros 'ps' tienen que obtener su información de alguna parte) –

Respuesta

30

Usando kill(2):

if (kill(pid, 0) == 0) { 
    /* process is running or a zombie */ 
} else if (errno == ESRCH) { 
    /* no such process with the given pid is running */ 
} else { 
    /* some other error... use perror("...") or strerror(errno) to report */ 
} 
+2

Simple. Elegante. Exhaustivo. +1. – DevSolar

+0

Gracias Juliano. Agradezco su rápida y excelente respuesta. –

+3

Y también inútil a menos que el proceso sea un proceso secundario del proceso de llamada. Los PID se pueden reutilizar * tan pronto como * un proceso final sea 'esperado' por su padre, por lo que si existe un proceso por un PID dado, no hay garantía de que sea el proceso que usted cree que es a menos que sea el padre (y entonces usted ya sabe si su pid fue devuelto por una función 'wait'-family). –

Cuestiones relacionadas