comm scheint den Befehl auf 15 Zeichen zu kürzen. Verwenden Sie commandstattdessen, um das Problem zu beheben.
Nemo
1
[Ubuntu 14.04.4 LTS] $ 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.
OmarOthman
3
Eigentlich commgibt den Namen der binären und commandkehrt Argument 0
robbie
45
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
Achtung: Das OP erwähnt UNIX. Nicht alle UNIX-Systeme implementieren Plan 9 wie prozessspezifische Dateien. Ihre Antwort gilt im Allgemeinen nur für Linux.
Slhck
3
Während das stimmt, haben sie die Frage "Linux" getaggt. Jeder, der ein nicht auf Linux basierendes UNIX-Betriebssystem verwendet, ist es gewohnt, die Antworten an seine Bedürfnisse anzupassen
Andrew White,
14
Um den Pfad des Programms unter Verwendung einer bestimmten PID zu ermitteln, können Sie Folgendes verwenden:
Dieser Befehl hat mir mehr geholfen, als ich brauchte. Ich habe die vollständige Übersicht über den Prozess, der gestartet wurde. Bei einem Java-Prozess wird mit dem psBefehl nur ein Punkt javaangezeigt, der Rest der übergebenen Parameter wird jedoch vollständig mit angezeigt pmap.
Daniel Andrei Mincă
3
Sie können awk auch in Kombination mit ps verwenden
ps aux | awk '$2 == PID number for a process { print $0 }'
Dies ist instabil, da auch Prozesse ausgewählt werden, die die Nummer an einer beliebigen Stelle in ihrem Befehl enthalten. Überprüfen ps ax | grep 1Sie beispielsweise, ob der initProzess tatsächlich zurückgegeben wird. (In meinem Fall werden 119 Zeilen zurückgegeben - nicht wünschenswert.)
slhck
1
@slhck Die Antwort wurde geändert ... Danke für die Info. ps -p 1 -o comm = ist die beste Option für diese Frage.
Gangadhar
Wir brauchen nicht zwei Läufe, um Header beizubehalten, sondern verwenden 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.
Dave_thompson_085
3
Ähnlich wie die Antwort von slhck , jedoch unter Verwendung von Dateioperationen anstelle von Befehlsaufrufen:
[Ubuntu 14.04.4 LTS] cat /proc/1/comm=> init, nicht / sbin / init. In seiner Antwort ist die längere Version enthalten. Aber trotzdem +1.
OmarOthman
2
Ü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.
Funktioniert nicht mit BSD (vielleicht auch mit MacOSX? Ich bin mir nicht sicher). Auch wenn -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.
Dave_thompson_085
0
Ich finde die einfachste Methode, um mit dem folgenden Befehl zu sein:
Abgesehen davon, dass ps -p${pid}dies im Vergleich zu hochgradig ineffizient ist, wird dies eine Vielzahl von Fehlalarmen auffangen - einschließlich der grepselbst.
Toby Speight
0
hat ein einfaches Skript erstellt, um PID zu finden und in Bash-Skripten zu verwenden ...
mit Vorsicht zu verwenden !!
ps
oderls -l /proc/$PID/exe
ps -fp PID
wird das volle Kommando zeigenAntworten:
Auf allen POSIX-kompatiblen Systemen und unter Linux können Sie Folgendes verwenden
ps
: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 6quelle
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 undcommand
kehrt Argument 0Sie finden den Prozessnamen oder den Befehl, der von der Prozess-ID oder der PID von verwendet wird
indem du tust
Hier pid ist die pid, für die Sie den Namen finden möchten.
Zum Beispiel:
Um den von pid 2480 verwendeten Prozessnamen zu finden, können Sie can verwenden
quelle
Um den Pfad des Programms unter Verwendung einer bestimmten PID zu ermitteln, können Sie Folgendes verwenden:
alternativ können Sie verwenden:
quelle
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.Beispiel:
quelle
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.
quelle
ps
Befehl nur ein Punktjava
angezeigt, der Rest der übergebenen Parameter wird jedoch vollständig mit angezeigtpmap
.Sie können awk auch in Kombination mit ps verwenden
Beispiel:
HEAD LINE können Sie drucken
quelle
ps ax | grep 1
Sie beispielsweise, ob derinit
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:
quelle
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.
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.
quelle
-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 dergrep
selbst. Alle (AFAIK)ps
haben-p
, also einfachps -fp 33
.Ich finde die einfachste Methode, um mit dem folgenden Befehl zu sein:
quelle
ps -p${pid}
dies im Vergleich zu hochgradig ineffizient ist, wird dies eine Vielzahl von Fehlalarmen auffangen - einschließlich dergrep
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é
quelle