25 Stimmen

Wie wird /proc/pid/cmdline geparst?

Ich versuche, die cmdline eines Prozesses unter Linux aufzuteilen, aber es scheint, dass ich mich nicht darauf verlassen kann, dass sie durch ' \0 ' Zeichen. Wissen Sie, warum manchmal die ' \0 ' als Trennzeichen verwendet wird und manchmal ist es ein normales Leerzeichen?

Kennen Sie eine andere Möglichkeit, den Namen der ausführbaren Datei und den Pfad zu ihr zu ermitteln? Ich habe versucht, diese Informationen mit "ps" zu erhalten, aber es gibt immer die gesamte Befehlszeile zurück und der Name der ausführbaren Datei wird abgeschnitten.

Danke.

3voto

tosh Punkte 1663

Super-einfach (aber nur für einen Prozess, nicht für Massenparsing usw.):

$ cat /proc/self/cmdline "a b" "cd e" | xargs -0

So funktioniert es: Standardmäßig, xargs nur echo seinen Eingang, und schalten Sie -0 erlaubt es, null-getrennte Zeilen zu lesen, statt Zeilenumbrüche.

2voto

camh Punkte 38167

Sehen Sie sich meine Antwort an ici . Er deckt ab, was ich gefunden habe, als ich versuchte, dies selbst zu tun.

Edit: Schauen Sie sich an este Thread auf debian-user für ein Bash-Skript, das sein Bestes tut, um das zu tun, was Sie wollen (suchen Sie nach Version 3 des Skripts in diesem Thread).

1voto

johnraff Punkte 197

Name der ausführbaren Datei:

cat /proc/${pid}/comm

Ausführbarer Pfad:

readlink -f /proc/${pid}/exe

Wenn Sie eine aktuelle Bash haben, können Sie mapfile verwenden, um die Befehlszeile in ihre Argumente aufzuteilen und sie in einem Array "command_line" wie folgt zu speichern:

mapfile -d '' -t command_line < "/proc/${pid}/cmdline"

Viel mehr über /proc/ hier: proc(5) - Linux Handbuchseite

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X