Comment obtenir un nom de processus de son pid? Par exemple, j'exécute cat file1.txt, mais je veux comprendre cette commande cat et ses arguments depuis son pid dans le système. Existe-t-il une structure pour le déterminer ou quelque chose de similaire? Une idée?
Il n'y a aucun moyen général de faire cela sous Unix.
Chaque système d'exploitation a différentes manières de le gérer et certains sont très difficiles. Vous mentionnez cependant Linux. Sous Linux, les informations se trouvent dans le système de fichiers/proc.
Pour obtenir la ligne de commande du processus id 9999, lisez le fichier /proc/9999/cmdline
.
Sous linux, vous pouvez regarder dans /proc/
. Essayez de taper man proc
pour plus d'informations. Le contenu de /proc/$PID/cmdline
vous donnera la ligne de commande qui traite $PID
a été exécuté avec. Il y a aussi /proc/self
pour vous examiner :)
Une alternative (par exemple sur Mac OS X) consiste à utiliser libproc
. Voir libproc.h .
POSIX C ne prend PAS en charge une API standard pour obtenir le nom du processus par PID.
Sous linux, vous pouvez obtenir le nom par LINUX Proc API:/proc/$ PID/cmdline. Et le code ressemble à ceci:
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;
}
Pour obtenir le nom de processus d'un identifiant de processus, par exemple 9000, utilisez cette commande:
ps -p 9000 -o comm=
Bien que cette question ait été répondue, je voudrais ajouter mes 2 cents.
Dans mon cas, lorsque le processus 1111
crée le processus 22222
via pipe
(c'est du moins ce que j'ai entendu), /proc/2222/cmdline
ne donne pas le nom de processus correct, mais donne à la place quelque chose comme 1111_1
. Je dois utiliser /proc/2222/comm
pour obtenir le nom de processus correct.
Utilisez la commande ci-dessous sous Linux
ls -l /proc/[pid]/exe
Il donnera le nom du processus/nom de l'application