Linux - Znajdź aktualny katalog roboczy procesu?

11

Jeśli mam proces PID X, jak mogę dowiedzieć się, w którym katalogu był uruchomiony? Widzę z ps aux | grep Xpełnym wierszem poleceń, z którym został wywołany. Jednak w tym przypadku tak jest ./script.shi chcę zobaczyć, który z script.shnich działa.

Rory
źródło

Odpowiedzi:

11

Problem /proc/PID/exepolega na tym, że w przypadku skryptów powłoki pokazuje ona lokalizację powłoki. Problem /proc/PID/cwdpolega na tym, że pokazuje bieżący katalog roboczy procesu. Jeśli proces zmienia katalogi, jest to odzwierciedlone w celu tego dowiązania symbolicznego.

Spowoduje to wyświetlenie $ PWD w momencie uruchomienia skryptu (zamień interesujący Cię identyfikator procesu, gdzie widzisz „PID”):

procdir=$(grep -az "\bPWD" /proc/PID/environ); echo $procdir

lub po prostu:

grep -az "\bPWD" /proc/PID/environ

Spowoduje to wyświetlenie polecenia, które je uruchomiło, abyś mógł zobaczyć, czy użyto katalogu względnego czy bezwzględnego:

proccmd=$(grep -az PROC_NAME /proc/PID/cmdline); echo $proccmd

lub po prostu:

grep -az PROC_NAME /proc/PID/cmdline

Razem powinny one pokazać, który skrypt jest uruchamiany. Dla jednego, który zaczął ./wszystko, czego potrzebujesz, to procdir.

Wstrzymano do odwołania.
źródło
pwdx jest lepszy niż ten.
Bjorn,
8

Odpowiedź jest prostsza i można jej użyć pwdx, jak wyszczególniono tutaj

Markus Jevring
źródło
To lepsza odpowiedź.
Bjorn,