
Если у меня есть процесс 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
, как подробно описаноздесь