Вообщем ктонить может мне оказать помошь в таком деле... необходимо написать демона... самого простого и минимального.. кто нить тут может дать? ну или по мыло можно скинуть.. буду очень признателен.. а то надо написать демона.. и не знаю с чего начать и по чем мануалы смотреть .... а писать надо на С... соответсвенно под линуъх :) хотя бы просто чтобы демон сидел в памямяти... потом записла номер своего процесса в файл и через минутку убилбы сам себя :) вот... пиво вышлю по почте :)
Командир !
Прежле всего - Я ничего тебе присылать не буду.
1. Если это задание по работе: ТАКИЕ игрушки ( не демоны вообще, а ИГРУШКА, которая тебе нужна ) пишутся за один перекур. Если ты не можешь сделать это - тебя зря взяли на работу.
2. Если это контрольная работа в интституте - тем более не допросишься :-)
man daemon
>man daemonНе катит, так как далеко не во всех системах есть.
Демон должен сделать следующее:
- уйти в фон, стать session-leader'ом
- переоткрыть stdin, stdout на /dev/null м stderr на /dev/console (зависит от...), желательно позакрывать все лишние дескрипторы
- сказать chdir("/");, возможно, сказать chroot("куда-то");
- Что-то еще точно забыл.
Если уж говорить о Понятиях, то демон - это процесс исполняющийся в фоновом режиме. Всё остальное: алгоритм работы, активация/остановка, Его и НЕего файлы, стандартный ввод/вывод, отношения с файловой системой и прочая определяются ТОЛЬКО и ИСКЛЮЧИТЕЛЬНО спецификой задачи.
Если не секрет, что значит "стать session-leader'ом" ?
>Если не секрет, что значит "стать
>session-leader'ом" ?man 2 setsid
man 2 getsid
Во FreeBSD man 2 intro, раздел DEFINITIONS
Ну, ща сляпаем... Не проблема... ;-)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
>Ну, ща сляпаем... Не проблема... ;-)
>
>
>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
>
почитай Робачевского. Там очень толково и подробно объясняется.