Я работаю над демоном, который взаимодействует с несколькими процессами. Демон не может постоянно следить за процессами, но он должен быть в состоянии правильно определить, умирает ли процесс, чтобы высвободить пугающие ресурсы, которые он для него хранит.
Процессы могут взаимодействовать с демоном, передавая ему некоторую информацию при запуске, но не наоборот. Таким образом, демон не может просто запросить у процесса его личность.
Простейшей формой было бы использование только их PID. Но в конечном итоге другой процесс может быть назначен тому же самому PID без уведомления моего инструмента.
Лучшим подходом было бы использование PID плюс время запуска процесса. Новый процесс с тем же PID будет иметь другое время запуска. Но я не мог найти способ, как получить время запуска процесса в формате POSIX. Использование ps
или просмотр /proc/<pid>/stat
кажется недостаточно переносимым.
Более сложная идея, которая кажется совместимой с POSIX, будет заключаться в следующем:
- Каждый процесс создает временный файл.
- Блокирует его с помощью
flock
- Сообщает моему демону: «Моя личность связана с этим файлом».
- В любое время демон может проверить временный файл. Если он заблокирован, процесс активен. Если это не так, процесс мертв.
Но это кажется излишне сложным.
Есть ли лучший или стандартный способ?
Изменить: демон должен иметь возможность возобновить работу после перезапуска, поэтому невозможно поддерживать постоянное соединение для каждого процесса.