Question Si je connais le numéro PID d'un processus, comment puis-je obtenir son nom?


Si j'ai le numéro PID pour un processus (sur un ordinateur UNIX), comment puis-je trouver le nom du processus associé?

Qu'est-ce que je dois faire?


205
2017-08-17 07:12


origine


Vous pouvez utiliser ps ou ls -l /proc/$PID/exe - Eddy_Em
@Eddy_Em qui vous donnera le fichier exécutable, qui n'est pas toujours le nom du processus. Aussi, ce n'est pas portable ... - derobert
ps -fp PID montrera la commande complète - Temak


Réponses:


Sur tous les systèmes compatibles POSIX et avec Linux, vous pouvez utiliser ps:

ps -p 1337 -o comm=

Ici, le processus est sélectionné par son PID avec -p. le -o option spécifie le format de sortie, comm signifiant le nom de la commande.

Voir également: ps - Les spécifications de la base d’Open Group Numéro 6


222
2017-08-17 08:21



comm semble tronquer la commande à 15 caractères. En utilisant command au lieu de cela corrige. - Nemo
[Ubuntu 14.04.4 LTS] $ ps -p 1 -o comm=  init $ ps -p 1 -o command=  / sbin / init; ce qui signifie que ce n'est pas environ 15 caractères, peut-être juste le nom du binaire contre son chemin complet. - OmarOthman
Réellement, comm donne le nom du binaire et command retourne l'argument 0 - robbie0630


Vous pouvez trouver le nom du processus ou la commande utilisée par id-process ou pid de

/proc/pid/cmdline

en faisant

cat /proc/pid/cmdline

Ici, pid est le pid pour lequel vous voulez trouver le nom
Par exemple:

 # ps aux

   ................
   ................
   user  2480  0.0  1.2 119100 12728 pts/0  Sl   22:42   0:01 gnome-terminal
   ................
   ................

Pour trouver le nom de processus utilisé par pid 2480, vous pouvez utiliser

# cat /proc/2480/cmdline 

 gnome-terminal

37
2017-08-17 08:04



Attention: l'OP mentionne UNIX. Tous les UNIX n'implémentent pas le fichier Plan 9 comme un fichier spécifique au processus. Votre réponse ne concerne généralement que Linux. - slhck
Bien que ce soit vrai, ils ont tagué la question "linux". Quiconque utilise un système d'exploitation UNIX non basé sur Linux sera assez habitué à devoir modifier les réponses en fonction de ses besoins. - Andrew White


Pour obtenir le chemin du programme en utilisant un certain pid, vous pouvez utiliser:

ps ax|egrep "^ [PID]"

alternativement vous pouvez utiliser:

ps -a [PID]

enter image description here


12
2018-04-18 02:16



ps -a liste tous les processus associés au terminal, il ne prend aucune entrée. - Michael Lee
@MichaelLee Je suppose que cela dépend de la ps version, sur procps version 3.2.7 fonctionne bien - Pedro Lobito


# ls -la /proc/ID_GOES_HERE/exe

Exemple:

# ls -la /proc/1374/exe
lrwxrwxrwx 1 chmm chmm 0 Mai  5 20:46 /proc/1374/exe -> /usr/bin/telegram-desktop

7
2018-05-06 00:14



Celui-ci est parfait. - jayarjo
Probablement mieux: readlink /proc/1337/exe. readlink - imprime les liens symboliques résolus ou les noms de fichiers canoniques. - Pablo Bianchi


Vous pouvez utiliser pmap. Je recherche le PID 6649. Et en supprimant les détails du processus supplémentaire.

$ pmap 6649 | head -1
6649:   /usr/lib64/firefox/firefox

5
2018-05-27 04:28





Vous pouvez également utiliser awk en combinaison avec ps

ps aux | awk '$2 == PID number for a process  { print $0 }'

Exemple:

root@cprogrammer:~# ps aux | awk '$2 == 1 { print $0 }'
root         1  0.0  0.2  24476  2436 ?        Ss   15:38   0:01 /sbin/init    

pour imprimer HEAD LINE, vous pouvez utiliser

 ps --headers aux |head -n 1 && ps aux | awk '$2 == 1 { print $0 }'

                 (or) 

 ps --headers aux |head -n 1; ps aux | awk '$2 == 1 { print $0 }'


root@cprogrammer:~# ps --headers aux |head -n 1 && ps aux | awk '$2 == 1 { print $0 }'
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.2  24476  2436 ?        Ss   15:38   0:01 /sbin/init

3
2017-08-17 09:32



Ceci est instable car il sélectionne également les processus qui incluent le numéro n'importe où dans leur commande. Essayer ps ax | grep 1 et voir si cela retourne vraiment le initprocessus, par exemple. (Dans mon cas, il retourne 119 lignes - pas souhaitable.) - slhck
@slhck Modification de la réponse ... merci pour info .. ps -p 1 -o comm = est la meilleure option pour cette question. - Gangadhar
Nous n'avons pas besoin de deux exécutions pour conserver les en-têtes, mais plutôt ps aux | awk 'NR==1 || $2==PID' - et n'a pas besoin de dire {print $0} parce que c'est la valeur par défaut. Mais comme vous l'avez dit, -p c'est mieux quand même. - dave_thompson_085


Simmilar à Réponse de slhck, mais en s'appuyant sur les opérations de fichiers au lieu des invocations de commandes:

MYPID=1
cat "/proc/$MYPID/comm"

2
2017-08-30 23:31



[Ubuntu 14.04.4 LTS] cat /proc/1/comm => init, pas / sbin / init. Sa réponse a la version la plus longue incluse. Mais +1 de toute façon. - OmarOthman


Étonnamment, personne n'a mentionné l'option -f (commande complète) pour ps. J'aime l'utiliser avec -e (tout) et diriger les résultats vers grep pour que je puisse affiner ma recherche.

ps -ef | grep <PID>

Ceci est également très utile pour examiner les commandes complètes exécutées par une personne qui utilise beaucoup de ressources sur votre système. Cela vous montrera les options et les arguments transmis à la commande.


2
2018-02-23 21:47



Ne fonctionne pas sur BSD (peut-être y compris MacOSX? Je ne suis pas sûr). Même où -e -f sont disponibles, grep peut produire de nombreuses fausses correspondances, par ex. grep 33 inclut pid = 933 ou 339, ppid = 33 ou 933 ou 339, utilisé 33 secondes ou 33 minutes, ou un nom de programme ou un argument contenant 33 - y compris le grep lui-même Tous (AFAIK) ps Avoir -pdonc juste ps -fp 33. - dave_thompson_085


Je trouve que la méthode la plus simple consiste à utiliser la commande suivante:

ps -awxs | grep pid

0
2017-11-21 09:48



En plus d'être très inefficace par rapport à ps -p${pid}, cela va ramasser beaucoup de faux positifs - y compris le grep lui-même - Toby Speight