In einer Windows-Umgebung gibt es eine API, um den Pfad abzurufen, auf dem ein Prozess ausgeführt wird. Gibt es etwas Ähnliches in Unix / Linux?
Oder gibt es eine andere Möglichkeit, dies in diesen Umgebungen zu tun?
Unter Linux hat der Symlink /proc/<pid>/exe
den Pfad der ausführbaren Datei. Verwenden Sie den Befehl readlink -f /proc/<pid>/exe
, um den Wert abzurufen.
Unter AIX existiert diese Datei nicht. Sie könnten vergleichen cksum <actual path to binary>
und cksum /proc/<pid>/object/a.out
.
sudo
Wenn die Ausgabe leer ist, werden einige Prozesse von anderen Systembenutzern erstellt.Sie können die Exe auf diese Weise leicht finden, versuchen Sie es einfach selbst.
ll /proc/<PID>/exe
pwdx <PID>
lsof -p <PID> | grep cwd
quelle
pwdx <PID>
gab mir den Ort des symbolischen Links, damit ich die Protokolle finden und den Vorgang ordnungsgemäß stoppen konnte.ll
in der Regel ist ein Alias :alias ll='ls -alF'
.Ein bisschen spät, aber alle Antworten waren spezifisch für Linux.
Wenn Sie auch Unix benötigen, benötigen Sie Folgendes:
BEARBEITET: Der von Mark Lakata gemeldete Fehler wurde behoben.
quelle
"/proc/self/exe"
durchsprintf(foo,"/proc/%d/exe",pid)
Ich benutze:
Ersetzen Sie 786 durch Ihre PID oder Ihren Prozessnamen.
quelle
pwdx <process id>
Dieser Befehl ruft den Prozesspfad ab, von dem aus er ausgeführt wird.
quelle
Unter Linux hat jeder Prozess einen eigenen Ordner
/proc
. Sie können alsogetpid()
die PID des laufenden Prozesses abrufen und sie dann mit dem Pfad verknüpfen/proc
, um den Ordner zu erhalten, den Sie hoffentlich benötigen.Hier ist ein kurzes Beispiel in Python:
Hier ist auch das Beispiel in ANSI C:
Kompiliere es mit:
quelle
Es gibt keine "garantiert überall funktionieren" -Methode.
Schritt 1 besteht darin, argv [0] zu überprüfen. Wenn das Programm über seinen vollständigen Pfad gestartet wurde, hat dies (normalerweise) den vollständigen Pfad. Wenn es über einen relativen Pfad gestartet wurde, gilt dasselbe (obwohl dies das Abrufen des aktuellen Arbeitsverzeichnisses mithilfe von getcwd () erfordert.
Schritt 2, wenn keiner der oben genannten Punkte zutrifft, besteht darin, den Namen des Programms abzurufen, dann den Namen des Programms von argv [0] abzurufen, dann den PATH des Benutzers aus der Umgebung abzurufen und diesen durchzugehen, um festzustellen, ob es einen geeigneten gibt ausführbare Binärdatei mit demselben Namen.
Beachten Sie, dass argv [0] von dem Prozess festgelegt wird, der das Programm ausführt, sodass es nicht 100% zuverlässig ist.
quelle
danke: Kiwy
mit AIX:
quelle
Sie können den Pfad auch unter GNU / Linux abrufen mit (nicht gründlich getestet):
Wenn Sie möchten, dass das Verzeichnis der ausführbaren Datei möglicherweise das Arbeitsverzeichnis in das Verzeichnis des Prozesses ändert (für media / data / etc), müssen Sie alles nach dem letzten / löschen:
quelle
Der folgende Befehl sucht nach dem Namen des Prozesses in der Liste der laufenden Prozesse und leitet den Befehl pid an pwdx um, um den Speicherort des Prozesses zu ermitteln.
Ersetzen Sie "abc" durch Ihr spezifisches Muster.
Wenn Sie es alternativ als Funktion in .bashrc konfigurieren können, ist es möglicherweise nützlich, es zu verwenden, wenn Sie es häufig verwenden müssen.
Zum Beispiel:
Hoffe das hilft irgendwann jemandem .....
quelle
Suchen Sie den Pfad zu einem Prozessnamen
quelle
pgrep
); In der nächsten Zeile wird der Pfad der ausgeführten Binärdatei abgerufen (/proc/$PID/exe
ist ein Symlink zur ausführbaren Datei). und schließlich gibt es diesen Symlink wieder.