2012-08-02 27 views
7

Vorrei sapere se un processo è in esecuzione. NON voglio usare alcun comando di sistema (""). Esiste una funzione basata su C che ti consente di sapere se un processo è in esecuzione?Come scoprire se un processo è in esecuzione in C?

Vorrei fornire il nome del processo e voglio sapere se è in esecuzione.

Grazie,

+0

Penso che tu debba essere più specifico su cosa esattamente vuoi fare. Conoscete il pid o il nome del processo in questione? –

+0

Conosco il nome del processo, Sì. – Kitcha

+0

Si potrebbe voler guardare questa domanda correlata: http://stackoverflow.com/questions/3667486/display-all-process-using-a-posix-function – rayd09

risposta

9

Certo, utilizzare kill(2):

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

int kill(pid_t pid, int sig); 

Se sig è 0, nessun segnale viene inviato, ma il controllo degli errori viene ancora eseguita; questo può essere usato per verificare l'esistenza di un ID di processo o di un ID di un gruppo di processi.

Quindi basta chiamare kill(pid, 0) sul l'ID di processo del processo che si desidera controllare e vedere se si ottiene un errore (ESRCH).

+0

Questo è un buon modo per verificare se si ha l'id di processo, ma ha solo il nome del processo. – cegfault

+0

@cegfault: è vero. Un nome in realtà non ti dice "il processo", poiché potrebbero esserci molti processi con lo stesso nome. Penso che la domanda dell'OP manchi di alcuni dettagli importanti. –

+0

Non esiste un "nome processo": 'execve (argv [0], NULL, NULL);' – wildplasser

0

È possibile eseguire la scansione del file system /proc per tutti i processi attualmente in esecuzione e verificare se la voce cmdline corrisponde a ciò che si desidera per quel particolare processo.

Tuttavia, c'è una condizione di gara. Il processo potrebbe morire dopo aver deciso che era in esecuzione.

Il modo sicuro per sapere se il processo è ancora in esecuzione è quello che ha avviato il processo. Quindi, quando un bambino muore, riceverai SIGCHLD e puoi utilizzare waitpid(-1,..) per scoprire quale figlio è morto.

2

Su Linux, un altro modo per fare ciò potrebbe includere l'esame del contenuto della directory /proc. Le directory numerate sono ID di processo, mentre le sottodirectory contenenti il ​​file cmdline mostrano il nome del comando.

Per esempio, se /proc/1234/cmdline contiene il valore foo, quindi elaborare foo ha un ID di 1234. Si potrebbe mappare nomi ai PID in questo modo, utilizzando le funzioni di accesso ai file standard in C. Vedi proc(5) per ulteriori informazioni.

Problemi correlati