2017-06-02 3 views
0

Ich bin derzeit auf einem Mac und konnte es nicht auf einem anderen Mac versuchen, also bin ich mir nicht sicher, ob sich die genauen Prozessnummern ändern werden. Ich habe ein C-Programm geschrieben, das mir Prozesslisten gibt, und es stolpert über diese beiden und gibt mir '?' stattdessen. Ich habe den Befehlszeilenbefehl ps aux verwendet, um alle Prozesse auf meinem System aufzulisten, und im Gegensatz zu den anderen haben beide Prozesse 11558 und 16290 ihre Pfade in Klammern und sind ziemlich merkwürdig. Was geht hier vor sich? Was sind Pfade (dd) und (security_authra)? Gibt es eine Möglichkeit, auf die "tatsächlichen" Pfade zuzugreifen?Mit ps aux haben die Prozesse 11558 und 16290 ihre Pfade in Klammern: "(dd)" und "(security_authra)". Was ist das?

Danke

Antwort

0

Dies passiert, wenn ein Prozess seine Befehlszeilenargumente ändert. Zum Beispiel auf meinem System habe ich diesen Prozess:

$ ps aux -q 1478 
USER  PID %CPU %MEM VSZ RSS TTY  STAT START TIME COMMAND 
rich  1478 0.0 0.0 99208 3340 ?  S 19:14 0:00 (sd-pam) 

Aber ps meldet nur die Befehlszeilenargumente in /proc:

$ strings /proc/1478/cmdline 
(sd-pam) 

aber es immer noch möglich ist, die ausführbare Datei, um herauszufinden, dass der Prozess läuft :

$ sudo ls -l /proc/1478/exe 
lrwxrwxrwx. 1 root root 0 Jun 5 16:19 /proc/1478/exe -> /usr/lib/systemd/systemd 
+0

Was meinst du mit Änderungen seiner Befehlszeile Argumente? Und warum sollte das den Pfad verändern/verbergen? – lelephantt

+0

@lelephantt Die Befehlszeilenargumente werden im Speicher als Array von Zeichenfolgen gespeichert. Dieses Array kann geändert werden. Siehe diese Frage zum Beispiel: https://stackoverflow.com/questions/963493/is-it-possible-to-change-argv-or-doe-i-need-to-create-an-adjusted-copy-of- Oder sehen Sie, wie systemd es tut: https://github.com/systemd/systemd/blob/3e7d14d78c4d15ec7789299216cbf5c58e61547b/src/basic/process-util.c#L278 –

Verwandte Themen