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

263

Si j'ai le numéro PID d'un processus (sur une machine UNIX), comment puis-je connaître le nom de son processus associé?

Que dois-je faire?

AndreaNobili
la source
9
Vous pouvez utiliser psouls -l /proc/$PID/exe
Eddy_Em
1
@ Eddy_Em qui vous donnera le fichier exécutable, qui n'est pas toujours le nom du processus. En outre, ce n'est pas portable ...
derobert
9
ps -fp PIDmontrera la commande complète
Temak

Réponses:

284

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. L' -ooption spécifie le format de sortie, commc'est-à-dire le nom de la commande.

Voir aussi: ps- Spécifications du groupe ouvert Open Issue 6

slhck
la source
28
comm semble tronquer la commande à 15 caractères. Utiliser à la commandplace le corrige.
Nemo
1
[Ubuntu 14.04.4 LTS] $ ps -p 1 -o comm= init $ ps -p 1 -o command= / sbin / init; ce qui signifie qu'il ne s'agit pas d'environ 15 caractères, peut-être juste du nom du binaire par rapport à son chemin complet.
OmarOthman
3
En fait, commdonne le nom du binaire et commandretourne l'argument 0
robbie
45

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

/proc/pid/cmdline

en faisant

cat /proc/pid/cmdline

Ici pid est le pid pour lequel vous voulez trouver le nom
For exmaple:

 # ps aux

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

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

# cat /proc/2480/cmdline 

 gnome-terminal
Stormvirux
la source
14
Attention, le PO mentionne UNIX. Les UNIX n’implémentent pas tous le fichier Plan 9 spécifique au processus. Votre réponse ne concerne généralement que Linux.
Slhck
3
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 pour répondre à ses besoins
Andrew White
14

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]

entrez la description de l'image ici

Pedro Lobito
la source
1
ps -aliste tous les processus associés au terminal, cela ne prend aucune entrée.
Michael Lee
@ MichaelLee Je suppose que cela dépend de la psversion, ça procps version 3.2.7marche bien.
Pedro Lobito
8
# 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
Carlos HM Moreira
la source
Celui-ci est parfait.
jayarjo
1
Probablement mieux: readlink /proc/1337/exe. readlink - affiche les liens symboliques résolus ou les noms de fichiers canoniques.
Pablo Un
8

Vous pouvez utiliser pmap. Je cherche le PID 6649. Et je coupe les détails supplémentaires du processus.

$ pmap 6649 | head -1
6649:   /usr/lib64/firefox/firefox
Mike Studer
la source
Cette commande m'a aidé plus que nécessaire, j'ai toute la ligne du processus qui a commencé. Avec un processus Java, avec la pscommande, tout ce que vous voyez est juste java, mais le reste des paramètres passés sera affiché complètement avec pmap.
Daniel Andrei Mincă
3

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
Gangadhar
la source
2
Ceci est instable car il sélectionnerait également les processus qui incluent le numéro n'importe où dans leur commande. Essayez de ps ax | grep 1voir si cela retourne vraiment le initprocessus, par exemple. (Dans mon cas, il retourne 119 lignes - ce qui n'est pas souhaitable.)
slhck
1
@slhck Modifié la réponse ... merci pour l'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 de les utiliser ps aux | awk 'NR==1 || $2==PID'- et nous n'avons pas besoin de le dire, {print $0}car il s'agit de la valeur par défaut. Mais comme vous l'avez dit, -pc'est mieux quand même.
dave_thompson_085
3

Simmilar à la réponse de slhck , mais en s’appuyant sur des opérations sur les fichiers plutôt que sur des appels de commandes:

MYPID=1
cat "/proc/$MYPID/comm"
ThorSummoner
la source
[Ubuntu 14.04.4 LTS] cat /proc/1/comm=> init, pas / sbin / init. Sa réponse a la version longue incluse. Mais +1 quand même.
OmarOthman
2

É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 afin de pouvoir affiner ma recherche.

ps -ef | grep <PID>

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

Jdelaporte
la source
3
Ne fonctionne pas sur BSD (y compris peut-être MacOSX? Je ne suis pas sûr). Même lorsqu'ils -e -fsont disponibles, ils greppeuvent produire de nombreuses correspondances fausses, par exemple, grep 33pid = 933 ou 339, ppid = 33 ou 933 ou 339, une utilisation de 33 secondes ou 33 minutes, ou un nom de programme ou un argument contenant 33, y compris le greplui - même. Tous (AFAIK) psont -p, donc juste ps -fp 33.
dave_thompson_085
0

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

ps -awxs | grep pid
utilisateur666282
la source
En plus d'être très inefficace par rapport à ps -p${pid}, cela ramassera beaucoup de faux positifs - y compris le grepsoi
Toby Speight
0

fait un script simple pour trouver PID et utiliser dans les scripts bash ...
utilisez avec prudence !!

Capture d'écran: http://pastebin.com/Cm9YH67U
Capture d'écran



André

André Verwijs
la source