URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 613
[ Назад ]

Исходное сообщение
"Вообщем ктонить может мне оказать помошь в таком деле... необходимо написать демона..."

Отправлено paran0id , 23-Мрт-02 14:15 
Вообщем ктонить может мне оказать помошь в таком деле... необходимо написать демона... самого простого и минимального..  кто нить тут может дать? ну или по мыло можно скинуть.. буду очень признателен.. а то надо написать демона.. и не знаю с чего начать и по чем мануалы смотреть .... а писать надо на С... соответсвенно под линуъх :) хотя бы просто чтобы демон сидел в памямяти... потом записла номер своего процесса в файл и через минутку убилбы сам себя :) вот... пиво вышлю по почте :)

Содержание

Сообщения в этом обсуждении
"RE: Вообщем ктонить может мне оказать помошь в таком деле... необходимо написать демона..."
Отправлено Арлекин , 24-Мрт-02 10:43 
Командир !
Прежле всего - Я ничего тебе присылать не буду.
1. Если это задание по работе: ТАКИЕ игрушки ( не демоны вообще, а ИГРУШКА, которая тебе нужна ) пишутся за один перекур. Если ты не можешь сделать это - тебя зря взяли на работу.
2. Если это контрольная работа в интституте - тем более не допросишься :-)

"RE: Вообщем ктонить может мне оказать помошь в таком деле... необходимо написать демона..."
Отправлено David , 24-Мрт-02 23:25 
man daemon

"RE: Вообщем ктонить может мне оказать помошь в таком деле... необходимо написать демона..."
Отправлено Ivan Beriozko , 26-Мрт-02 22:41 
>man daemon

Не катит, так как далеко не во всех системах есть.

Демон должен сделать следующее:

- уйти в фон, стать session-leader'ом
- переоткрыть stdin, stdout на /dev/null м stderr на /dev/console (зависит от...), желательно позакрывать все лишние дескрипторы
- сказать chdir("/");, возможно, сказать chroot("куда-то");
- Что-то еще точно забыл.


"RE: Вообщем ктонить может мне оказать помошь в таком деле... необходимо написать демона..."
Отправлено Арлекин , 27-Мрт-02 10:10 
Если уж говорить о Понятиях, то демон - это процесс исполняющийся в фоновом режиме. Всё остальное: алгоритм работы, активация/остановка, Его и НЕего файлы, стандартный ввод/вывод, отношения с файловой системой и прочая определяются ТОЛЬКО и ИСКЛЮЧИТЕЛЬНО спецификой задачи.

"RE: Вообщем ктонить может мне оказать помошь в таком деле... необходимо написать демона..."
Отправлено XMan , 28-Мрт-02 01:18 
Если не секрет, что значит "стать session-leader'ом" ?

"RE: Вообщем ктонить может мне оказать помошь в таком деле... необходимо написать демона..."
Отправлено zaa , 13-Апр-02 23:48 
>Если не секрет, что значит "стать
>session-leader'ом" ?

man 2 setsid
man 2 getsid
Во FreeBSD man 2 intro, раздел DEFINITIONS


"RE: Вообщем ктонить может мне оказать помошь в таком деле... необходимо написать демона..."
Отправлено Highlander , 05-Апр-02 13:51 
Ну, ща сляпаем... Не проблема... ;-)

hernya.c
===
#include <stdio.h>
#include <sys/unistd.h>
#include <signal.h>
#include <syslog.h>

void sig_terminate()
{
  syslog(LOG_NOTICE, "Aaaaahhhh... I'm killed... Call to police... ;-)");
  remove("/var/run/hernya.pid");
  exit(0);
}

void sig_hangup()
{
  signal(SIGHUP, sig_hangup);
  syslog(LOG_NOTICE, "Got hangup signal. Reload config file. Hm... But he is not present... ;-)");
}

main()
{
  FILE *f;

  if (fork()) exit(0);

  if ((f = fopen("/var/run/hernya.pid", "wt"))!=NULL)
  {
    fprintf(f, "%d", getpid());
    fclose(f);
  }
  syslog(LOG_NOTICE, "Going to daemon mode an go to Lucifer... ;-)");
  fclose(stdout);
  fclose(stderr);
  stdout = fopen("/dev/null", "w");
  stderr = fopen("/dev/null", "w");
  signal(SIGTERM, sig_terminate);
  signal(SIGHUP, sig_hangup);
  for(;;);

  return 0;
}
===

Запускается - создает /var/run/hernya.pid
Лог при этом, пишется в /var/log/messages
По kill -1 вызывается sig_hangup
Выходит по kill и удаляет /var/run/hernya.pid


"RE: Вообщем ктонить может мне оказать помошь в таком деле... необходимо написать демона..."
Отправлено zaa , 10-Апр-02 20:07 
>Ну, ща сляпаем... Не проблема... ;-)
>
>
>hernya.c
>===
>#include <stdio.h>
>#include <sys/unistd.h>
>#include <signal.h>
>#include <syslog.h>
>
>void sig_terminate()
>{
>  syslog(LOG_NOTICE, "Aaaaahhhh... I'm killed...
>Call to police... ;-)");
>  remove("/var/run/hernya.pid");
>  exit(0);
>}
>
>void sig_hangup()
>{
>  signal(SIGHUP, sig_hangup);
>  syslog(LOG_NOTICE, "Got hangup signal.
>Reload config file. Hm... But
>he is not present... ;-)");
>
>}
>
>main()
>{
>  FILE *f;
>
>  if (fork()) exit(0);

setsid(); /* session and group leader */

chdir("/");


>  if ((f = fopen("/var/run/hernya.pid",
>"wt"))!=NULL)
>  {
>    fprintf(f, "%d",
>getpid());
>    fclose(f);
>  }
  
   openlog("hernya", LOG_PID | LOG_CONS, LOG_DAEMON);

>  syslog(LOG_NOTICE, "Going to daemon
>mode an go to Lucifer...
>;-)");
  
   closelog();

>  fclose(stdout);
>  fclose(stderr);
>  stdout = fopen("/dev/null", "w");
>
>  stderr = fopen("/dev/null", "w");
>
>  signal(SIGTERM, sig_terminate);
>  signal(SIGHUP, sig_hangup);
>  for(;;);
>
>  return 0;
>}
>===
>
>Запускается - создает /var/run/hernya.pid
>Лог при этом, пишется в /var/log/messages
>
>По kill -1 вызывается sig_hangup
>Выходит по kill и удаляет /var/run/hernya.pid
>



"RE: Вообщем ктонить может мне оказать помошь в таком деле... необходимо написать демона..."
Отправлено mar , 18-Апр-02 13:18 
почитай Робачевского. Там очень толково и подробно объясняется.