Назад | Перейти на главную страницу

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

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

Проблема с /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, как подробно Вот