Wie kann ich den Namen des zugeordneten Prozesses ermitteln, wenn ich die PID-Nummer für einen Prozess (auf einem UNIX-Computer) habe?
Was muss ich tun?
ps -fp PIDwird das volle Kommando zeigen
Wie kann ich den Namen des zugeordneten Prozesses ermitteln, wenn ich die PID-Nummer für einen Prozess (auf einem UNIX-Computer) habe?
Was muss ich tun?
ps -fp PIDwird das volle Kommando zeigen
Antworten:
Auf allen POSIX-kompatiblen Systemen und unter Linux können Sie Folgendes verwenden ps:
ps -p 1337 -o comm=
Hier wird der Prozess durch seine PID mit ausgewählt -p. Die -oOption gibt das Ausgabeformat an, commdh den Befehlsnamen.
Siehe auch: ps- The Open Group Base Specifications Issue 6
commandstattdessen, um das Problem zu beheben.
$ ps -p 1 -o comm= init $ ps -p 1 -o command= / sbin / init; Das bedeutet, dass es sich nicht um 15 Zeichen handelt, sondern nur um den Namen der Binärdatei im Vergleich zum vollständigen Pfad.
commgibt den Namen der binären und commandkehrt Argument 0
Sie finden den Prozessnamen oder den Befehl, der von der Prozess-ID oder der PID von verwendet wird
/proc/pid/cmdline
indem du tust
cat /proc/pid/cmdline
Hier pid ist 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, können Sie can verwenden
# cat /proc/2480/cmdline
gnome-terminal
Um den Pfad des Programms unter Verwendung einer bestimmten PID zu ermitteln, können Sie Folgendes verwenden:
ps ax|egrep "^ [PID]"
alternativ können Sie verwenden:
ps -a [PID]
ps -aliste alle Prozesse auf, die dem Terminal zugeordnet sind, es werden keine Eingaben gemacht.
psVersion ab, procps version 3.2.7funktioniert gut.
# 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
readlink /proc/1337/exe. readlink - druckt aufgelöste symbolische Links oder kanonische Dateinamen.
Sie können pmap verwenden. Ich suche nach PID 6649. Und schneide die zusätzlichen Prozessdetails ab.
$ pmap 6649 | head -1
6649: /usr/lib64/firefox/firefox
psBefehl nur ein Punkt javaangezeigt, der Rest der übergebenen Parameter wird jedoch vollständig mit angezeigt pmap.
Sie können awk auch 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
HEAD LINE können Sie drucken
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
ps ax | grep 1Sie beispielsweise, ob der initProzess tatsächlich zurückgegeben wird. (In meinem Fall werden 119 Zeilen zurückgegeben - nicht wünschenswert.)
ps aux | awk 'NR==1 || $2==PID'- und müssen nicht sagen, {print $0}weil es die Standardeinstellung ist. Aber wie du kommentiert hast, -pist es sowieso besser.
Ähnlich wie die Antwort von slhck , jedoch unter Verwendung von Dateioperationen anstelle von Befehlsaufrufen:
MYPID=1
cat "/proc/$MYPID/comm"
cat /proc/1/comm=> init, nicht / sbin / init. In seiner Antwort ist die längere Version enthalten. Aber trotzdem +1.
Überraschenderweise hat niemand die Option -f (vollständiger Befehl) für ps erwähnt. Ich verwende es gerne mit -e (alles) und leite die Ergebnisse an grep weiter, damit ich meine Suche eingrenzen kann.
ps -ef | grep <PID>
Dies ist auch sehr nützlich, um vollständige Befehle anzuzeigen, die von jemandem ausgeführt werden, der viele Ressourcen auf Ihrem System beansprucht. Dies zeigt Ihnen die Optionen und Argumente, die an den Befehl übergeben wurden.
-e -fverfügbar, grepkönnen viele falsche Übereinstimmungen erzeugt werden, z. B. grep 33pid = 933 oder 339, ppid = 33 oder 933 oder 339, 33 Sekunden oder 33 Minuten verwendete Zeit oder Programmname oder Argument mit 33 - einschließlich der grepselbst. Alle (AFAIK) pshaben -p, also einfach ps -fp 33.
Ich finde die einfachste Methode, um mit dem folgenden Befehl zu sein:
ps -awxs | grep pid
ps -p${pid}dies im Vergleich zu hochgradig ineffizient ist, wird dies eine Vielzahl von Fehlalarmen auffangen - einschließlich der grepselbst.
hat ein einfaches Skript erstellt, um PID zu finden und in Bash-Skripten zu verwenden ...
mit Vorsicht zu verwenden !!
Screenshot: http://pastebin.com/Cm9YH67U

André
psoderls -l /proc/$PID/exe