Как найти файл.pid для данного процесса

Я настраиваю monit и хочу контролировать данное приложение python. Monit делает это, просматривая PID-файлы для процессов, но я не знаю, где это будет.

Я также попытался создать свой собственный простой исполняемый файл и запустить его - и здесь я не могу понять, где создается файл.pid.

И есть ли у всех процессов файл.pid?

2 ответа

Решение

Обычно вы найдете PID-файлы для демонизированных процессов в /var/run/ в системах Redhat/CentOS.

Если не считать этого, вы всегда можете заглянуть в сценарий инициализации процесса. Например, демон SSH запускается с помощью скрипта в /etc/init.d/sshd, Иногда там указывается PID (поиск pid, PID, PIDFILE, PID_FILE и т. Д.).

Тем не менее, большинство других демонов в системах в стиле RHEL являются источником /etc/init.d/functions скрипт для некоторых общих черт.

# Set $pid to pids from /var/run* for {program}.  $pid should be declared
# local in the caller.
# Returns LSB exit code for the 'status' action.
__pids_var_run() {
        local base=${1##*/}
        local pid_file=${2:-/var/run/$base.pid}

Для всего, что источники /etc/init.d/functions ПИД будет жить в /var/run/*.pid,

Для пользовательских приложений PID будет определен в скрипте-оболочке (надеюсь). Однако большинство разработчиков, которых я знаю, придерживаются того же соглашения, что и приведенные выше демоны.

Если вы сталкиваетесь с чем-то без PID-файла, помните, что Monit может также контролировать строку процесса.

Другой подход, который я выбрал:

У меня есть сервер базы данных, работающий во встроенном режиме, и данные находятся в каталоге содержащего приложения.

В базе данных есть что-то вроде файла.pid, но он называет это файлом блокировки. Чтобы найти этот файл блокировки, я перечислил все файлы, открытые приложением:

$ ls -l /proc/18264/fd | cut -d'>' -f2

Это дало мне длинный список, включающий сокеты, каналы, файлы сервера и т. Д. Несколько фильтров, и я получил то, что мне было нужно:

$ ls -l /proc/18264/fd | cut -d'>' -f2 | grep /home/ | cut -b40- | sort | uniq | grep titan

/windup/reports/group_report.LJfZVIavURqg.report/graph/titangraph/00000000.jdb
/windup/reports/group_report.LJfZVIavURqg.report/graph/titangraph/je.info.0
/windup/reports/group_report.LJfZVIavURqg.report/graph/titangraph/je.info.0.lck
/windup/reports/group_report.LJfZVIavURqg.report/graph/titangraph/je.lck
Другие вопросы по тегам