[Решено] Реализация start/stop/restart в програме демоне

Модератор: Модераторы разделов

Аватара пользователя
ffldove
Сообщения: 480
Статус: Keep It Simple, Stupid
ОС: RFRemix 14

[Решено] Реализация start/stop/restart в програме демоне

Сообщение ffldove »

Собственно есть программа-демон (на с++), через argv передается в нее некоторый параметр start/stop/restart.
Правильно ли я понимаю что при вызове программы типа:

Код: Выделить всё

prog stop

демон ищет в памяти копию себя, выясняет PID и убивает копию (при restart запускает себя потом вновь)?
Если так, то как найти в памяти копию себя и убить её?

Прототип демона взятый в кокой то статье:

Код: Выделить всё

#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>
#include <syslog.h>
#include <string.h>

int main(void) {

  /* Наши ID процесса и сессии */
  pid_t pid, sid;

  /* Ответвляемся от родительского процесса */
  pid = fork();
  if (pid < 0) {
    exit(EXIT_FAILURE);
  }
  /* Если с PID'ом все получилось, то родительский процесс можно завершить. */
  if (pid > 0) {
    exit(EXIT_SUCCESS);
  }

  /* Изменяем файловую маску */
  umask(0);

  /* Здесь можно открывать любые журналы */

  /* Создание нового SID для дочернего процесса */
  sid = setsid();
  if (sid < 0) {
    /* Журналируем любой сбой */
    exit(EXIT_FAILURE);
  }

  /* Изменяем текущий рабочий каталог */
  if ((chdir("/")) < 0) {
    /* Журналируем любой сбой */
    exit(EXIT_FAILURE);
  }

  /* Закрываем стандартные файловые дескрипторы */
  close(STDIN_FILENO);
  close(STDOUT_FILENO);
  close(STDERR_FILENO);

  /* Специфичная для демона инициализация проходит тут */

  /* Большой Цикл */
  while (1) {
    /* Делаем здесь чего-нибудь ... */
    sleep(30); /* ждем 30 секунд */
  }
  exit(EXIT_SUCCESS);
}
I learned something today
Спасибо сказали:
pcodr
Сообщения: 283
ОС: Debian

Re: [Решено] Реализация start/stop/restart в програме демоне

Сообщение pcodr »

Программы старта, останова демонов обычно являются shell скриптами. Посмотрите в /etc/init.d
При запуске демон сохраняет свой pid в некотором файле (обычно в директории /var/run). Таким образом shell сценарию достаточно прочитать pid из pid файла и послать ему некоторый сигнал (завершения, рестарта, etc).
remote system type is unix
Спасибо сказали:
Аватара пользователя
ffldove
Сообщения: 480
Статус: Keep It Simple, Stupid
ОС: RFRemix 14

Re: [Решено] Реализация start/stop/restart в програме демоне

Сообщение ffldove »

pcodr писал(а):
22.03.2010 13:51
Программы старта, останова демонов обычно являются shell скриптами. Посмотрите в /etc/init.d
При запуске демон сохраняет свой pid в некотором файле (обычно в директории /var/run). Таким образом shell сценарию достаточно прочитать pid из pid файла и послать ему некоторый сигнал (завершения, рестарта, etc).

Ааа точно, а я что то об этом и не подумал.
I learned something today
Спасибо сказали: