Come ottenere un nome di processo dal suo pid? Ad esempio eseguo cat file1.txt, ma voglio capire quel comando cat e i suoi argomenti dal suo pid nel sistema. C'è una struttura per determinarlo o qualcosa di simile? Qualche idea?Nome processo dal suo pid in linux
risposta
Non esiste un modo generale per eseguire questo unix.
Ogni SO ha diversi modi per gestirlo e alcuni sono molto difficili. Si parla di Linux però. Con Linux, le informazioni sono nel filesystem/proc.
Per ottenere la riga di comando per ID processo 9999, leggere il file /proc/9999/cmdline
.
E per ottenere il nome processo per ID processo 9999, leggere il file '/ proc/9999/comm'. –
La domanda era come ottenere il nome del processo, non la riga di comando. Sul mio SUSE inserisco 'head/proc/9999/cmdline' per un processo kwrite e restituisce: 'kdeinit4: kwrite [kdeinit]'. Se uso/comm invece di/cmdline ottengo il risultato corretto: 'kwrite'. – Elmue
Su linux, è possibile cercare in . Prova a digitare man proc
per ulteriori informazioni. Il contenuto di /proc/$PID/cmdline
fornirà la riga di comando con cui è stato eseguito il processo $PID
. C'è anche /proc/self
per esaminare te stesso :)
Un'alternativa (ad esempio su Mac OS X) è utilizzare libproc
. Vedi libproc.h.
POSIX C NON supporta un'API standard per ottenere il nome del processo tramite PID.
In Linux, è possibile ottenere il nome dall'API LINUX Proc:/proc/$ PID/cmdline. E il codice appare come questi:
const char* get_process_name_by_pid(const int pid)
{
char* name = (char*)calloc(1024,sizeof(char));
if(name){
sprintf(name, "/proc/%d/cmdline",pid);
FILE* f = fopen(name,"r");
if(f){
size_t size;
size = fread(name, sizeof(char), 1024, f);
if(size>0){
if('\n'==name[size-1])
name[size-1]='\0';
}
fclose(f);
}
}
return name;
}
E se siete venuti qui alla ricerca di un soluzione in C# che funziona con mono, quindi dai un'occhiata a questo: http://stackoverflow.com/questions/29827331/workaround-for-bug-in-mono-wrong-process-processname-solved – Elmue
per ottenere il nome di un processo id processo dire 9000 l'uso di questo comando:
ps -p 9000 -o comm=
Anche se questa domanda è stato risposto, vorrei aggiungere la mia 2 centesimi.
Nel mio caso, quando il processo 1111 crea 22222 processo tramite il tubo (almeno questo è quello che ho sentito),/proc/2222/cmdline non dà nome corretto processo, ma invece dà qualcosa come 1111_1. Devo usare/proc/2222/comm per ottenere il nome del processo corretto.
possibile duplicato di [Ottieni nome processo per PID] (http://stackoverflow.com/questions/4189717/get-process-name-by-pid) – Hasturkun