Wie erhalte ich die Befehlszeile des UNIX-Prozesses?

8

Ist es möglich, die Befehlszeile abzurufen, mit der ein Prozess unter Mac OS X aufgerufen wurde?

user7656
quelle
1
ps --pid $PID -o args=Das ist es, was ich sowieso
benutze
2
Das Mac-Äquivalent dieses Befehls lautet:ps -p <pid> -o args=
Nate
1
Wenn "-o args =" die Ausgabe abschneidet, können Sie versuchenps -p <pid> -o command=
Jose Alban

Antworten:

11

ps axzeigt Ihnen die Befehlszeile aller laufenden Prozesse; Sie können nach der gewünschten PID suchen.

Bkkbrad
quelle
@ mark4o Oder einfach ps awux | cat, da ps -w die Anzahl der anzuzeigenden Spalten nicht begrenzt, wenn die Ausgabe nicht stdout ist, z. B. wenn sie an einen anderen Befehl weitergeleitet wird.
Jtimberman
1
Warum passiert das jede Woche? "Warnung: schlechte ps-Syntax, möglicherweise ein falsches '-'? Siehe procps.sf.net/faq.html " und "Beachten Sie, dass sich" ps -aux "von" ps aux "unterscheidet. Die POSIX- und UNIX-Standards erfordern dies." ps -aux "druckt alle Prozesse, die einem Benutzer mit dem Namen" x "gehören, sowie alle Prozesse, die mit der Option -a ausgewählt würden. Wenn der Benutzer mit dem Namen" x "nicht vorhanden ist, interpretiert dieser ps den Befehl möglicherweise als "ps aux" stattdessen und drucken Sie eine Warnung aus. Dieses Verhalten soll beim Übergang alter Skripte und Gewohnheiten helfen. Es ist fragil, kann sich ändern und sollte daher nicht als verlässlich angesehen werden. "
Hallo71
Ich weiß nicht, Hallo71. Ich habe meine zweijährige Antwort für Sie korrigiert.
Bkkbrad
4

Tut:

~$ ps ax | grep "ntp"
   57   ??  Ss     0:04.66 /usr/sbin/ntpd -c /private/etc/ntp.conf -n
 3104 s000  S+     0:00.00 grep ntp

tun, was Sie brauchen (ändern Sie ntp zu dem Programm, an dem Sie interessiert sind)? Dies gibt mir normalerweise die Befehlszeilenargumente zum Ausführen von Prozessen (ich überprüfe, was Launchd beispielsweise beim Ausführen eines Systemdämons verwendet hat).

Das Tentakel
quelle
2

cat /proc/$PROCESSNUMBER/cmdline | tr '\0' '\n'

Obwohl es Linux-spezifisch ist, erhält es die Befehlszeile des Prozesses $PROCESSNUMBERdirekt vom Kernel (dem /proc/$PROCESSNUMBER/cmdlineTeil) und macht ihn lesbar, indem jedes Argument in eine separate Zeile gesetzt wird, indem tr -tokendie \ 0 in Zeilenumbrüche (\ n) übersetzt (mit Ersetzen) werden.

Diese Zeile funktioniert nur, wenn Sie eine echte Prozessnummer eines laufenden Prozesses (Sie können eine finden, indem Sie den Befehl ps -efausführen) in den Teil $ PROCESSNUMBER einfügen!

JdeHaan
quelle
3
Das Originalplakat fragte nach Mac OS X (das nicht im Lieferumfang enthalten ist procfs)
Andre Holzner
2
Oderxargs -0 < /proc/PID/cmdline
Bash