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 PID
wird 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 PID
wird 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 -o
Option gibt das Ausgabeformat an, comm
dh den Befehlsnamen.
Siehe auch: ps
- The Open Group Base Specifications Issue 6
command
stattdessen, 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.
comm
gibt den Namen der binären und command
kehrt 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 -a
liste alle Prozesse auf, die dem Terminal zugeordnet sind, es werden keine Eingaben gemacht.
ps
Version ab, procps version 3.2.7
funktioniert 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
ps
Befehl nur ein Punkt java
angezeigt, 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 1
Sie beispielsweise, ob der init
Prozess 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, -p
ist 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 -f
verfügbar, grep
können viele falsche Übereinstimmungen erzeugt werden, z. B. grep 33
pid = 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 grep
selbst. Alle (AFAIK) ps
haben -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 grep
selbst.
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é
ps
oderls -l /proc/$PID/exe