Wie kann ich die ausführbare Datei finden, wenn ein Prozess mit ps ausgeführt wird?

11

Wenn ich sehe, dass ein Prozess mit ausgeführt wird ps -e, wie kann ich die Datei finden, die ihn gestartet hat?

Interstar
quelle
2
Welches Betriebssystem ist das? Linux, BSD, Solaris ...
Patrick
Linux ... aber Cross-Unix-Lösungen sind willkommen.
Interstar

Antworten:

15

Unter Linux: Wenn Sie die PID kennen, können Sie die cmdline-Datei für diese Datei katzen. Z.B:

cat /proc/PID/cmdline

Dies wird wahrscheinlich fehlschlagen, wenn die Binärdatei nach dem Start des Programms verschoben wurde.

Und natürlich:

lsof -n | grep PID | grep ' txt '

und:

ls -la /proc/PID/exe

Dies ist eine symbolische Verknüpfung zur ausführbaren Datei.

Folkert van Heusden
quelle
1
Beachten Sie, dass /proc/PID/cmdlinees keinen Zeilenumbruch gibt, daher möchten Sie wahrscheinlich so etwas tun cat /proc/PID/cmdline ; echo ''.
Keith Thompson
Tatsächlich hat es NUL-Zeichen, die die Argumente trennen, also möchten Sie vielleicht etwas noch Aufwändigeres wietr '\0' ' ' < /proc/PID/cmdline ; echo ''
Keith Thompson
2

Kopieren Sie die Prozess-ID vom ps -eBefehl und führen Sie dann Folgendes aus:

ps x | grep <process-id>
Aditya Patawari
quelle
Wird das nicht scheitern, wenn eine Anwendung argv [0] bearbeitet? iirc sendmail macht das.
Folkert van Heusden
Ja, das ist eine Wahrscheinlichkeit. Trotzdem ist dies fast jedes Mal praktisch.
Aditya Patawari
0

Keine der Methoden ( ls, lsofoder cat) in den anderen Antworten arbeitet für mich. Wenn ich mache:

$ nano test.txt

Das ist mein Gewinner:

$ pgrep -f -l test
3074 nano test.txt

Oder um nur die PID zu erhalten, um sie bei der Programmierung zu verwenden:

$ pgrep -f test
3074

Getestet unter Kali Linux v1.0.6 (Debian-basiert).
Im Vergleich zu einer einfachen lsmuss ich zugeben, dass es keine so tragbare Lösung ist, aber zumindest funktioniert es.

Sopalajo de Arrierez
quelle