Я запустил сервисного демона, путем выполнения двоичного файла (записанный в C++) через файл сценария сохранил rc5.d.
Но я не уверен, как получить pid процесса демона и сохранить его в изодромном с предварением файле в/var/run/.pid. Так, чтобы я мог использовать pid для завершения. Как я могу сделать это?
Попробуйте использовать start-stop-daemon (8)
с аргументом - pidfile
в вашем сценарии инициализации . Пусть ваша программа записывает свой PID в указанное место (обычно определяется в файле конфигурации).
Вам следует обратить внимание на устаревшие файлы PID, например, если файл блокировки сохранялся после перезагрузки. Эту логику лучше всего реализовать в самом сценарии инициализации, отсюда и параметр - exec
для start-stop-daemon
.
Например, если /var/run/foo.pid
равно 1234
, а / proc / 1234 / exe
не ваша служба, блокировка Файл устарел и должен быть тихо удален, чтобы служба запустилась в обычном режиме.
Что касается вашего приложения, просто убедитесь, что местоположение файла блокировки настраивается, и существуют некоторые средства, чтобы сообщить сценарию инициализации, куда его поместить.
Например: (пример: / etc / default / foo):
PIDFILE=/var/run/foo.pid
OTHEROPTION=foo
Затем в /etc/init.d/foo:
[ -f /etc/default/foo ] && . /etc/default/foo
Опять же, кроме последовательной записи в файл, вся эта логика должна быть обрабатывается вне вашего приложения.
Если вам известен порт, открытый программой, используйте команду fuser
, чтобы определить pid.