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?


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.


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>

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.