Jakich poleceń można użyć, aby znaleźć bieżący katalog roboczy (CWD) uruchomionego procesu? Byłyby to polecenia, których można użyć zewnętrznie z procesu.
167
Jakich poleceń można użyć, aby znaleźć bieżący katalog roboczy (CWD) uruchomionego procesu? Byłyby to polecenia, których można użyć zewnętrznie z procesu.
Są 3 metody, o których wiem:
$ pwdx <PID>
$ lsof -p <PID> | grep cwd
$ readlink -e /proc/<PID>/cwd
Powiedzmy, że mamy ten proces.
$ pgrep nautilus
12136
Jeśli użyjemy pwdx
:
$ pwdx 12136
12136: /home/saml
Lub możesz użyć lsof
:
$ lsof -p 12136 | grep cwd
nautilus 12136 saml cwd DIR 253,2 32768 10354689 /home/saml
Lub możesz zaczepić bezpośrednio w /proc
:
$ readlink -e /proc/12136/cwd/
/home/saml
/proc
.pwdx
pracuje dla mnie.pgrep <process-name>
Zakładam, że masz identyfikator procesu
pid
. Większość metod w większości systemów wymaga, aby powłoka, z której to robisz, działała jako ten sam użytkownik co proces docelowy (lub root).W systemach Linux i Solaris i być może w niektórych innych systemach Windows:
W systemie Linux (oprócz systemów wbudowanych, w których
readlink
nie jest dostępny), ale nie w systemie Solaris:Możesz użyć niemal każdego wariantu unixowego
lsof
. Uważaj, jeśli pojawi się nowa linia, zostanie wydrukowana jako\n
(nie do odróżnienia od odwrotnego ukośnika, po której następujen
). Jeśli masz szczęście, możesz użyć drugiej formy, która cicho dusi wszystkie białe znaki w nazwie katalogu.Bonus: jeśli chcesz spowodować, aby proces zmienił swój bieżący katalog, możesz to zrobić za pomocą debugera. Jest to przydatne na przykład do przeniesienia długo działającego programu, który nie dba o swój bieżący katalog, z katalogu, który chcesz usunąć. Nie wszystkie programy doceniają fakt, że ich bieżący katalog jest zmieniany pod stopami - na przykład powłoka może ulec awarii.
źródło
pwdx
innych uniksów?pwdx
jest obecny na Solarisie od XX wieku, Linux od połowy 2000 roku (naśladuje Solaris, jak mówi strona podręcznika). Nie występuje na żadnym innym uniksowym AFAIK.pwdx
tam jest ?Jeśli twój system ma
/proc
, zawsze możesz:Jeśli chcesz poznać CWD z innego procesu niż ten, który Cię interesuje, oczywiście musisz zastąpić
$$
PID swojego interesującego Cię procesu.źródło
Na podstawie odpowiedzi @Gilles ..
jeśli znasz PID swojego procesu .. dla Mac OSX i Linux użyj:
uzyskać działający katalog procesów ...
źródło