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

11

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

Рори
источник

Ответы:

11

Проблема /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 лучше, чем это.
Бьорн
8

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

Маркус Йевринг
источник
Это лучший ответ.
Бьорн