Я хочу знать PID которые были назначены процессу до его последнего 2-3 перезапуска.
Сценарий: после сбоя этого конкретного процесса создается файл журнала и PID процесса присоединяется к имени файла журнала. У меня есть 5 файлов журнала с именем hs_err_PIDs. Я хочу подтвердить, были ли эти PID назначены процессу, которым я занимаюсь, поскольку меня это немного смущает.
Как я могу это сделать?
Вы МОЖЕТЕ найти эту информацию в файлах системного журнала. /var/log/messages
, /var/log/syslog
. Некоторые процессы при запуске выводят сообщения в системный журнал. Например, squid напечатает следующее:
May 8 00:00:00 proxy squid[7274]: Squid Parent: child process 28819 started
Если ваш процесс регистрирует такую информацию, вы можете знать старые PID, например 7274.
Другая возможность - это случай, когда ваш процесс вызывает ошибку, такую как segfault, когда он умирает. Вы найдете такой журнал:
May 8 00:00:00 proxy kernel: [1075746.767514] squid[24442]: segfault at 20 ip 00000000005bae26 sp 00007fff144918e0 error 4 in squid[400000+264000]
Вы также можете найти PID в такой записи журнала 24442.
В будущих случаях вам необходимо зарегистрировать такую информацию, если вы хотите найти ее позже.
Если приложение не записывает свой PID в файл журнала, вы не сможете получить эту информацию ретроспективно. Забегая вперед, вы можете написать сценарий оболочки для запуска вашего приложения и регистрации идентификаторов PID в файле или включить учет.
Простая обертка может быть
yourcommand &
echo $! >>/path/to/pid_history.log
Если где-то об этом нет записи в журнале (сделанной либо самой программой, либо ее стартовым скриптом), то получить эту информацию невозможно, поскольку нет стандартной записи этой информации.
# ps ax > /tmp/process.list; for i in `seq 1 600`; do echo $i >> /tmp/plog; date >> /tmp/plog; ps ax | diff /tmp/process.list - >> /tmp/plog; sleep 1; done; ping -a 127.0.0.1
Эта конструкция собирает разницу списка процессов в файл / tmp / plog в течение 10 минут за каждую секунду. После завершения регистрации он отправит вам сигнал с консоли.
Вы можете добавить это в файл rc.local, чтобы начать регистрацию сразу после запуска сервера.