Linux — как узнать текущий рабочий каталог процесса?

Linux — как узнать текущий рабочий каталог процесса?

Если у меня есть процесс PID X, как узнать, в каком каталоге он был запущен? Я могу увидеть с помощью ps aux | grep Xполной командной строки, с которой он был вызван. Однако в этом случае это ./script.sh, и я хочу увидеть, в каком script.shкаталоге он запущен.

решение1

Проблема в /proc/PID/exeтом, что для скриптов оболочки он показывает расположение оболочки. Проблема в /proc/PID/cwdтом, что он показываеттекущийрабочий каталог процесса. Если процесс меняет каталоги, это отражается в цели этой символической ссылки.

Это покажет, каким был $PWD на момент запуска скрипта (замените «PID» на интересующий вас идентификатор процесса):

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

или просто:

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

Это покажет команду, которая ее запустила, и вы сможете увидеть, использовался ли относительный или абсолютный каталог:

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

или просто:

grep -az PROC_NAME /proc/PID/cmdline

Вместе они должны показать вам, какой скрипт запущен. Для одного запущенного ./все, что вам нужно, это procdir.

решение2

Есть более простой ответ, и это использовать pwdx, как подробно описаноздесь

Связанный контент