Linux - узнать текущий рабочий каталог процесса?
Если у меня есть PID X процесса, как я могу узнать, в каком каталоге он запущен? Я могу видеть с ps aux | grep X полная командная строка, с которой он был вызван. Однако в этом случае это ./script.shи я хочу увидеть, какие script.sh это работает.
2 ответа
Проблема с /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,
Там более простой ответ, и это использовать pwdx, как подробно здесь