W środowisku Windows istnieje API do uzyskania ścieżki, na której jest uruchomiony proces. Czy jest coś podobnego w systemie Unix / Linux?
Czy jest inny sposób, aby to zrobić w tych środowiskach?
W systemie Linux łącze symboliczne /proc/<pid>/exe
zawiera ścieżkę do pliku wykonywalnego. Użyj polecenia, readlink -f /proc/<pid>/exe
aby uzyskać wartość.
W systemie AIX ten plik nie istnieje. Możesz porównać cksum <actual path to binary>
i cksum /proc/<pid>/object/a.out
.
sudo
jeśli wyjście jest puste, niektóre procesy są tworzone przez innych użytkowników systemu.Możesz łatwo znaleźć exe w ten sposób, po prostu spróbuj sam.
ll /proc/<PID>/exe
pwdx <PID>
lsof -p <PID> | grep cwd
źródło
pwdx <PID>
podał mi lokalizację dowiązania symbolicznego, abym mógł znaleźć dzienniki i zatrzymać proces we właściwy sposób.ll
zwykle jest aliasem:alias ll='ls -alF'
.Trochę późno, ale wszystkie odpowiedzi dotyczyły Linuksa.
Jeśli potrzebujesz również unixa, potrzebujesz tego:
ZMIENIONO: Naprawiono błąd zgłoszony przez Marka lakata.
źródło
"/proc/self/exe"
sięsprintf(foo,"/proc/%d/exe",pid)
Używam:
Zastąp 786 swoim PID lub nazwą procesu.
źródło
pwdx <process id>
To polecenie pobierze ścieżkę procesu z miejsca, w którym jest wykonywana.
źródło
W systemie Linux każdy proces ma swój własny folder w
/proc
. Możesz więc użyćgetpid()
do pobrania pid uruchomionego procesu, a następnie połączyć go ze ścieżką,/proc
aby uzyskać folder, którego potrzebujesz.Oto krótki przykład w Pythonie:
Oto przykład również w ANSI C:
Skompiluj to z:
źródło
Nie ma metody „gwarantowanej pracy w dowolnym miejscu”.
Krok 1 polega na sprawdzeniu argv [0], jeśli program został uruchomiony z pełną ścieżką, miałby (zwykle) pełną ścieżkę. Jeśli został uruchomiony przez ścieżkę względną, te same blokady (chociaż wymaga to pobrania bieżącego katalogu roboczego przy użyciu funkcji getcwd ().
Krok 2, jeśli żadne z powyższych nie zachodzi, polega na uzyskaniu nazwy programu, następnie uzyskaniu nazwy programu z argv [0], a następnie uzyskaniu PATH użytkownika ze środowiska i przejściu przez to, aby sprawdzić, czy jest odpowiedni wykonywalny plik binarny o tej samej nazwie.
Zauważ, że argv [0] jest ustawiana przez proces, który wykonuje program, więc nie jest w 100% wiarygodna.
źródło
dzięki: Kiwy
z AIX:
źródło
Możesz również pobrać ścieżkę w systemie GNU / Linux za pomocą (nie do końca przetestowane):
Jeśli chcesz, aby katalog wykonywalny mógł zostać zmieniony z katalogu roboczego na katalog procesu (dla media / dane / itp.), Musisz porzucić wszystko po ostatnim /:
źródło
Poniższe polecenie wyszukuje nazwę procesu na liście uruchomionych procesów i przekierowuje pid do polecenia pwdx, aby znaleźć lokalizację procesu.
Zastąp „abc” określonym wzorcem.
Alternatywnie, jeśli mógłbyś skonfigurować go jako funkcję w .bashrc, może okazać się przydatny w użyciu, jeśli potrzebujesz tego często.
Na przykład:
Mam nadzieję, że to komuś kiedyś pomoże .....
źródło
Znajdź ścieżkę do nazwy procesu
źródło
pgrep
); w następnej linii pobiera ścieżkę/proc/$PID/exe
do wykonywanego pliku binarnego ( jest dowiązaniem symbolicznym do pliku wykonywalnego); i wreszcie odzwierciedla to dowiązanie symboliczne.