Frage Wenn ich die PID-Nummer eines Prozesses kenne, wie kann ich seinen Namen bekommen?


Wenn ich die PID-Nummer für einen Prozess (auf einem UNIX-Rechner) habe, wie kann ich den Namen des zugehörigen Prozesses herausfinden?

Was muss ich tun?


205
2017-08-17 07:12


Ursprung


Sie können verwenden ps oder ls -l /proc/$PID/exe - Eddy_Em
@Eddy_Em, die dir die ausführbare Datei gibt, die nicht immer der Prozessname ist. Auch das ist nicht tragbar ... - derobert
ps -fp PID zeigt vollen Befehl an - Temak


Antworten:


Auf allen POSIX-kompatiblen Systemen und mit Linux können Sie verwenden ps:

ps -p 1337 -o comm=

Hier wird der Prozess mit seiner PID mit ausgewählt -p. Das -o Option gibt das Ausgabeformat an, comm Bedeutung des Befehlsnamens.

Siehe auch: ps - Die Open Group Base Spezifikationen Ausgabe 6


222
2017-08-17 08:21



comm scheint den Befehl auf 15 Zeichen abzusenken. Verwenden command repariert es stattdessen. - Nemo
[Ubuntu 14.04.4 LTS] $ ps -p 1 -o comm=  drin $ ps -p 1 -o command=  / sbin / init; was bedeutet, dass es nicht etwa 15 Zeichen ist, vielleicht nur der Name des Binärzeichens gegenüber seinem vollständigen Pfad. - OmarOthman
Tatsächlich, comm gibt den Namen der Binärdatei und command gibt das Argument 0 zurück - robbie0630


Sie können den Prozessnamen oder den Befehl finden, der von der Prozess-ID oder der PID verwendet wird

/proc/pid/cmdline

indem du es tust

cat /proc/pid/cmdline

Hier ist pid die PID, für die Sie den Namen finden möchten
Zum Beispiel:

 # ps aux

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

Um den von pid 2480 verwendeten Prozessnamen zu finden, verwenden Sie can

# cat /proc/2480/cmdline 

 gnome-terminal

37
2017-08-17 08:04



Vorsicht: Das OP erwähnt UNIX. Nicht alle Unixe implementieren die Plan 9-ähnliche prozessspezifische Datei. Ihre Antwort gilt normalerweise nur für Linux. - slhck
Während das stimmt, haben sie die Frage "Linux" markiert. Jeder, der ein nicht Linux-basiertes UNIX-Betriebssystem verwendet, ist es gewohnt, die Antworten an seine Bedürfnisse anzupassen - Andrew White


Um den Pfad des Programms mit einer bestimmten PID zu ermitteln, können Sie Folgendes verwenden:

ps ax|egrep "^ [PID]"

alternativ können Sie verwenden:

ps -a [PID]

enter image description here


12
2018-04-18 02:16



ps -a listet alle Prozesse auf, die mit dem Terminal verbunden sind, es nimmt keine Eingabe vor. - Michael Lee
@MichaelLee Ich denke, es hängt von der ab ps Version, auf procps version 3.2.7 funktioniert gut. - Pedro Lobito


# ls -la /proc/ID_GOES_HERE/exe

Beispiel:

# 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



Dieser ist perfekt. - jayarjo
Wahrscheinlich besser: readlink /proc/1337/exe. readlink - druckt aufgelöste symbolische Links oder kanonische Dateinamen. - Pablo Bianchi


Sie können pmap verwenden. Ich suche PID 6649. Und die zusätzlichen Prozessdetails abschneiden.

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

5
2018-05-27 04:28





Sie können auch awk in Kombination mit ps verwenden

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

Beispiel:

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

um HEAD LINE zu drucken, die Sie verwenden können

 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



Dies ist instabil, da es auch Prozesse auswählen würde, die die Nummer irgendwo in ihrem Befehl enthalten. Versuchen ps ax | grep 1 und sehen, ob es wirklich das zurückgibt init Prozess zum Beispiel. (In meinem Fall gibt es 119 Zeilen - nicht wünschenswert.) - slhck
@slhck Modifizierte die Antwort ... Danke für Infos .. ps -p 1 -o comm = ist die beste Option für diese Frage. - Gangadhar
Wir brauchen nicht zwei Runs, um Header zu behalten, sondern verwenden ps aux | awk 'NR==1 || $2==PID' - und muss nicht sagen {print $0} weil es die Standardeinstellung ist. Aber wie du gesagt hast, -p ist sowieso besser. - dave_thompson_085


Ähnlich wie slhcks Antwort, aber verlassen sich auf Dateioperationen anstelle von Befehlsaufrufen:

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

2
2017-08-30 23:31



[Ubuntu 14.04.4 LTS] cat /proc/1/comm => init, nicht / sbin / init. Seine Antwort enthält die längere Version. Aber +1 trotzdem. - OmarOthman


Überraschenderweise hat niemand die Option -f (vollständiger Befehl) für ps erwähnt. Ich benutze es gerne mit -e (alles) und übergebe die Ergebnisse an grep, damit ich meine Suche eingrenzen kann.

ps -ef | grep <PID>

Dies ist auch sehr nützlich, wenn Sie sich die vollständigen Befehle ansehen möchten, die jemand ausführt, die eine Menge Ressourcen auf Ihrem System benötigen. Dies zeigt Ihnen die Optionen und Argumente, die an den Befehl übergeben werden.


2
2018-02-23 21:47



Funktioniert nicht mit BSD (vielleicht einschließlich MacOSX? Ich bin mir nicht sicher). Auch dort, wo -e -f stehen zur Verfügung, grep kann viele falsche Übereinstimmungen erzeugen, z.B. grep 33 enthält pid = 933 oder 339, ppid = 33 oder 933 oder 339, Zeit von 33 Sekunden oder 33 Minuten oder Programmname oder Argument mit 33 - einschließlich der grep selbst. Alle (AFAIK) ps habe es getan -p, also nur ps -fp 33. - dave_thompson_085


Ich finde die einfachste Methode mit folgendem Befehl:

ps -awxs | grep pid

0
2017-11-21 09:48



Abgesehen davon, dass sie im Vergleich zu ps -p${pid}, das wird viele falsche Positive aufnehmen - einschließlich der grep selbst. - Toby Speight


machte ein einfaches Skript, um PID zu finden und innerhalb von Bash-Skripten zu verwenden ...
Verwenden Sie mit Vorsicht !!

Bildschirmfoto:
Screenshot

http://pastebin.com/Cm9YH67U

André


0
2017-12-26 15:08