/proc/PID/cwd: когда процесс работает не из того каталога
У каждого Linux-процесса есть текущий рабочий каталог. Обычно мы видим его через shell, но для уже запущенного процесса можно посмотреть напрямую через /proc.
readlink /proc/1234/cwd
Например:
/var/lib/app
Это каталог, относительно которого процесс разрешает относительные пути.
▪️Найти процессы с неожиданным cwd
for p in /proc/[0-9]*; do
pid=${p##*/}
cwd=$(readlink "$p/cwd" 2>/dev/null) || continue
printf '%-8s %s\n' "$pid" "$cwd"
done
Теперь можно быстро увидеть, какие процессы находятся в /tmp, /dev/shm, домашних каталогах или других необычных местах.
▪️Почему это может быть важно
Приложение может запускаться из:
/opt/myapp
но после работы оказаться в другом каталоге из-за chdir().
Особенно интересны процессы с:
/tmp
/dev/shm
/home/user
если для конкретного сервиса такое поведение не ожидается.
▪️Связь с systemd
Для unit можно задать:
[Service]
WorkingDirectory=/var/lib/myapp
А фактическое значение уже запущенного процесса проверить через /proc.
Это полезнее, чем тупо смотреть конфигурацию: /proc/PID/cwd показывает состояние конкретного процесса прямо сейчас.
BashTex 📱 #bash #proc
У каждого Linux-процесса есть текущий рабочий каталог. Обычно мы видим его через shell, но для уже запущенного процесса можно посмотреть напрямую через /proc.
readlink /proc/1234/cwd
Например:
/var/lib/app
Это каталог, относительно которого процесс разрешает относительные пути.
▪️Найти процессы с неожиданным cwd
for p in /proc/[0-9]*; do
pid=${p##*/}
cwd=$(readlink "$p/cwd" 2>/dev/null) || continue
printf '%-8s %s\n' "$pid" "$cwd"
done
Теперь можно быстро увидеть, какие процессы находятся в /tmp, /dev/shm, домашних каталогах или других необычных местах.
▪️Почему это может быть важно
Приложение может запускаться из:
/opt/myapp
но после работы оказаться в другом каталоге из-за chdir().
Особенно интересны процессы с:
/tmp
/dev/shm
/home/user
если для конкретного сервиса такое поведение не ожидается.
▪️Связь с systemd
Для unit можно задать:
[Service]
WorkingDirectory=/var/lib/myapp
А фактическое значение уже запущенного процесса проверить через /proc.
Это полезнее, чем тупо смотреть конфигурацию: /proc/PID/cwd показывает состояние конкретного процесса прямо сейчас.
BashTex 📱 #bash #proc