Wie bestimme ich den Pfad zu einer Binärdatei eines Prozesses?

30

Gibt es eine Möglichkeit, das Verzeichnis / den Speicherort herauszufinden, von dem aus ein Prozess gestartet wurde? Ich bin mir des / proc-Mount bewusst, aber nicht wirklich, wo ich hineinschauen soll.

SuperJumbo
quelle
1
Meinen Sie den Speicherort der Binärdatei oder das Verzeichnis, aus dem ein Prozess gestartet wurde?
Lekensteyn
Entschuldigen Sie die Mehrdeutigkeit, ich meine die binäre
SuperJumbo

Antworten:

37

Der /procWeg wäre, den exeLink in dem Verzeichnis zu überprüfen, das der pid entspricht.

Nehmen wir ein Beispiel mit update-notifier:

Suchen Sie die pid, die in diesem Beispiel 15421 lautet :

egil@gud:~$ ps x | grep update-notifier
 2405 pts/4    S+     0:00 grep update-notifier
15421 ?        Sl     0:00 update-notifier

Schlagen Sie den symbolischen Link nach:

egil@gud:~$ file /proc/15421/exe
/proc/15421/exe: symbolic link to `/usr/bin/update-notifier'
Egil
quelle
Oh ja, ich war fast da. Legende, danke.
SuperJumbo
6

Vorausgesetzt, Sie haben eine Prozess-ID zur Verfügung, können Sie Folgendes verwenden:

readlink -f /proc/$pid/exe

(Ersetzen $piddurch die Prozess-ID eines Prozesses)

Wenn der Prozess Ihnen nicht gehört, müssen Sie ihn voranstellen sudo.

Ein Beispiel zum Ermitteln der Position des Befehls firefox:

  1. Die Ausgabe von ps ax -o pid,cmd | grep firefox:

    22831 grep --color=auto firefox
    28179 /usr/lib/firefox-4.0.1/firefox-bin
    
  2. 28179 ist die Prozess-ID, Sie müssen also Folgendes ausführen:

    readlink -f /proc/28179/exe
    

    welche Ausgänge:

    /usr/bin/firefox
    
Lekensteyn
quelle
2
Sie können coole Dinge tun /proc/$pid/exe, wenn die Binärdatei versehentlich gelöscht wird, können Sie sie wiederherstellen mit:dd if=/proc/$pid/exe of=restored-binary
Lekensteyn
1

Drücken Sie Ctrl+ Alt+ T, um zu einem Terminal zu gelangen und geben Sie Folgendes ein:

ls -al /proc/{pid}/fd  

und dann die Ausgabe überprüfen

Dies listet alle Dateien auf, denen Ihr Prozess zugeordnet ist ...

Xiaoyifang
quelle
Könnten Sie bitte meine Änderungen und auch die Bearbeitungshilfe überprüfen , um die Lesbarkeit Ihrer Antworten in Zukunft zu verbessern ... ;-)
Fabby
0

Alle Befehle in den anderen Antworten sind gut, aber Sie können noch mehr tun - sehen, wie ein Prozess tatsächlich ausgeführt wurde, bevor er in die Prozessliste aufgenommen wurde.

Im Terminal ausführen:

top

Und während es läuft, drücken Sie die Tastatur Cund Sie erhalten einen Befehl über die Prozesse, die ausgeführt wurden.

Aleks
quelle