LINUX.ORG.RU

"Если в двух словах"... то уже получилось 4 слова :) Если я вас правильно понял, то функция daemon() уже давно входит в glibc (в libc5 ее не было).

vodz ★★★★★
()

Slackware 7.1
man daemon
No manual entry for daemon
В FreeBSD действительно есть и нею пользовался.
Но вообще, надо закрыть
fclose(stdin);
fclose(stdout);
fclose(stderr);
chdir("/");
fork();
Родитель должен завершить свою работу, а потомок уже работает в бэкграунде

Havoc ★★★★
()

А вы не верте глазам своим. Она есть, вот манов нет :)) Я МНОГО такого уже навыкопал... Зюзас прям.

vodz ★★★★★
()

После fork() потомку не помешает еще сделать setsid(), чтобы снять ассоциацию с группой процессов и управляющим терминалом. Если демону нужно о чем-то сообщить, он может юзать функцию syslog().
andy.

anonymous
()

Еще нужно перехватывать некоторые сигналы (SIGTTIN, SIGTTOU,SIGSTOP).
А вообще читайте книги, напр. Робачевский, "Операционная система UNIX"

NewComer
()

2NewComer: знаешь умные слова? Батенька, это совсем не по делу, что вы ляпнули.

vodz ★★★★★
()
Ответ на: комментарий от vodz

2vodz: только не надо фамильярничать, мы с Вами вместе водку не пили.
И не ляпнул, а взял из этой книги, ее чай не глупее Вас человек писал.
И потом спрашивали ссылки, эта книга, я считаю, очень хорошее пособие.

ЗЫ. Насчет умных слов: да, знаю. И свои знания с успехом применяю на практике.

NewComer
()

2NewComer: Вот идите и читайте эти умные книжки. Как найдете, опеределение "демон" и этих сигналов - приходите, поговорим дальше. А на "ты" - это фидошная привычка. Откуда я знаю, мож для вас "Вы" большее оскорбление?

vodz ★★★★★
()
Ответ на: комментарий от vodz

2 vodz..
Это Вы батенька зря...
Сигнальчики то надо демону перехватывать...надо..
по своему обрабатывать и т.д.
Енто стандартная процедурка...или может у Вас демоны такие что они по sighup'у и sigusr'ам 
вываливаются потеряв только что полученную информацию...
Да, ежели демон просто висит и память жрёт, то конечно можно ничего и не перехватывать..

И на человека зря наехали....Вам бы тоже не мешало енту литературу полистать...

anonymous
()

Знаете, anonymous, я за свои 32 столько их прочел... Вы бы прочли, КАКИЕ сигналы предлагает перехватывать NewComer, а потом уж вклинивайтесь. Умники, блин.

vodz ★★★★★
()
Ответ на: комментарий от vodz

пардон...перехватывать нужно всё, что можно...в идеале...
ВСЁ, ЧТО ВИЖУ- то и перехватываю...
Ну немного человек ошибся...а какого хера наезжать-то?

anonymous
()

2anonymous: Неужели вы до сих пор не прочли постинг NewComer-а? Matrix спросил, я и Havoc норамально ответили. Может вы и есть тот самый NewComer, прячущийся за анонима? Конкретно по теме, создавалка демона отваливает после fork(), кому теперь нужны указанные сигналы? Кто их будет перехватывать? К тому же за возможность перехватывания SIGSTOP надо отрывать голову. А все что можно, тоже глупо. Перехватывать надо только те сигналы, которые будут служить специально для управления этим демоном, например, SIGHUP - перечитать конфиг, SIGTERM - корректно завершиться, доделав неотложные дела. Может вы предпочитаете убивать по KILL? Нафиг. На то и есть SIG_IGN по умолчанию для некоторых сигналов.

vodz ★★★★★
()
Ответ на: комментарий от vodz

2vodz:
Во-первых, Я НИКОГДА не скрываюсь под чужими именами.

Во-вторых, хамство НИКОГДА НИКОГО не украшало, а Вы, похоже,
этого до сих пор не уяснили, что подтверждает Ваш ответ анониму. Ну да ладно,
пусть это останется на Вашей совести.

А теперь по делу.
Цитирую Вас: "создавалка демона отваливает после fork(),
кому теперь нужны указанные сигналы? Кто их будет перехватывать?"
Перехватывать их будет потомок, т.к. диспозиция сигналов копируется в
порожденный процесс.Поэтому не помешает все лишние сигналы
игнорировать, если функциональность демона больше, нежели "Hello,World".
Кстати, если демон должен размножаться, напр, для параллельного обслуживания
входящих TCP-запросов, то нужно еще игнорировать SIGCHLD, а то его потомки,
завершившие свое выполнение, остаются в состоянии зомби до завершения работы
демона, а это не есть гуд. Кстати, до этого я докопался на собственном
опыте. Это к вопросу об умных книжках.

Когда я говорил о перехвате сигналов, о которых ломаются копья,
я конечно же имел в виду их игнорирование. И Аноним меня понял правильно.

По поводу обработки SIGHUP и SIGTERM полностью с Вами согласен,
так и делаю.

>"..я и Havoc нормально ответили..."
Ответил нормально все-таки Havoc, но не Вы.

2Вопрошавший:
Небольшое пояснение к ответу Havoc-a: Менять текущий каталог на корневой
потому, что если текущий каталог, из которого запускается демон, находится
на примонтированном разделе, то, не сделав chdir("/"), невозможно будет
этот раздел отмонтировать.

Честь имею, Владимир Замиусский.




NewComer
()
Ответ на: комментарий от NewComer

для некоторых, да... по умолчанию - ignore,
а например для sigusr'ов по умолчанию киляние...
теперь, посмотрим на реакцию большинства демонов на kill -SIGUSR1
 не киляются........вывод: вы сами додумаетесь? или подсказать надо?

anonymous
()

NewComer> Еще нужно перехватывать некоторые сигналы (SIGTTIN, SIGTTOU,SIGSTOP).
Сообщением раньше:
vodz> После fork() потомку не помешает еще сделать setsid()
SIGTTOU, и SIGTTIN после setsid() уже не придут, так, как генерируются они только при наличии управляющего терминала. Какого черта тогда их игнорировать ? Конечно послать их можно и с помощью kill(), но если уж захочется навредить, то от этого все равно никуда не денешься (SIGKILL пошлют). SIGSTOP, также, как и SIGKILL ни перехватить, ни проигнорировать нельзя. Скорее всего вы имели в виду SIGSTP - но и он не придет после setsid() (по причине, изложенной выше).

timur
()

2timur: Спасибо. Вы настоящий друг. Не пожалели своего времени на пальцах указать ошибки этих "девелопепперов". :) Вот только ради пущей справедливости, то что вы сказали от моего ника, хоть и абсолютно верно, но это сказал не я :)

vodz ★★★★★
()

2NewComer:

> Перехватывать их будет потомок, т.к. диспозиция сигналов копируется в

Какая чушь.

> >"..я и Havoc нормально ответили..."
> Ответил нормально все-таки Havoc, но не Вы.

Havoc просто расписал то что делает СТАНДАРТНАЯ ДАВНО (в BSD, в Linux
с появлением Glibc2) функция daemon(), о чем собственно и был мой
первый постинг. Зачем делать то, что уже есть и оттестированно,
лучше взять нормальные доки.

vodz ★★★★★
()
Ответ на: комментарий от vodz

2vodz: Почему же чушь?
Здесь Вы не правы.
Порожденный fork()-ом процесс является точной копией родителя.
А кроме диспозиции сигналов порожденный процесс наследует UID,GID,
переменные окружения, все файловые дескрипторы, управляющий терминал и другое.

По поводу daemon(): а как обстоит дело с ее переносимостью на не-BSD и не-linux
системы ?

А о том, что при отсоединении процесса от управляющего терминала некому будет слать
сигналы SIGTTIN,SIGTTOU,SIGSTP, я знал прекрасно. Все-таки их надо либо игнорировать,
либо вешать на них, как на SIGTERM, обработчик для нормального завершения работы демона.
Это для того, чтобы корректно его отстреливать kill-ом.




NewComer
()

Вы отстреливаете демоны kill'ом с помощью именно этих сигналов ? Да поймите Вы наконец - если некому их посылать, значит и перехватывать(игнорировать) их не надо. А вот, к примеру, SIGALRM почему не игнорируете ? Вдруг какой нибудь нибудь кретин его пошлет с помощью kill'a ?

timur
()
Ответ на: комментарий от timur

Я отстреливаю своих демонов сигналом SIGTERM, по которому они корректно завершаются
(уничтожают свои семафоры, разд. память, очередь сообщений).

>Да поймите Вы наконец - если некому их посылать, значит и
перехватывать(игнорировать) их не надо
Да, вы конечно правы, я просто перестраховался.

SIGALRM я не игнорирую, а перехватываю, и попылает его не кретин, а
мои демоны сами себе, в-частности, для обращения к АЦП-шке на очередном
цикле опроса датчиков.

NewComer
()

2Havoc: Перехватывать сигналы до fork()
a) Плохой стиль, да и не удобно это - после отвала от управляющего
терминала они меняют свой смысл
b) Совершенно непригодно, если старт осуществляется враппером.
Про SIGTTIN,SIGTTOU,SIGSTP советую усиленно еще раз прочитать
умные книжки.
Про ALARM - это <B>ваше</B> личное дело, вы <B>опять</B> сказали не по делу.
Про SIGTERM - это не <B>вы</B> придумали. Марш читать <I>man shutdown</I>
Ну что за люди, пишут сами не знают что, не говоря уже о том
как <B>надо</B>. Все жрет кучу ресурсов, ворочается еле-еле,
падает на ровном месте и <B>совершенно нельзя доверять результату</B>.
Понахватают верхов, а как копнешь... <B><I>абсолютная пустота</I></B>.




vodz ★★★★★
()

По моему это писал не Havoc :). Естественно, SIGALRM упоминался мной в случае отсутствия в логике работы демона необходимости перехватывать этот сигнал. Во навернул :). А вообще мне надоел этот спор - по моему все уже давно все поняли. И демон, под который задавался этот вопрос наверное уже написан :).

timur
()

2Havoc: Ой. Простите. Конечно это было для NewComer. 2timur: Точно. Зато обменялись глюками насчет ников: :))

vodz ★★★★★
()

Во блин, без меня меня склоняют.
Я здесь постил только один раз, да и сам прочел немало интересного.
Свой последний демон я писал год назад, да и то бросил это,
так как в той задаче можно было обойтись более простыми методами

Havoc ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.