Bug 9949 - Проблема с переопределенным stderr в initlog (SIGPIPE)
Summary: Проблема с переопределенным stderr в initlog (SIGPIPE)
Status: CLOSED NOTABUG
Alias: None
Product: Sisyphus
Classification: Development
Component: service (show other bugs)
Version: unstable
Hardware: all Linux
: P2 major
Assignee: placeholder@altlinux.org
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2006-09-02 16:18 MSD by Andrew Kornilov
Modified: 2006-09-03 15:21 MSD (History)
4 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Andrew Kornilov 2006-09-02 16:19:15 MSD
Дано:
1. Версия service: 0.5.10-alt1
2. "Демон", который при демонизации закрывает все файловые дескрипторы, кроме
stderr (зачем, это отдельный вопрос). 100% повторяемость на zabbix_agentd из
пакета zabbix-agent
3. При запуске демона с помощью функции start_daemon, он запускается через
initlog, который, насколько я понимаю, создает pipe-ы куда-то там для
стандартных fd (0,1,2)
4. Получаем неработающий демон, который постоянно получает SIGPIPE при попытке
записи в stderr:
getpid()                                = 15618
write(2, "zabbix_agentd [15618]: ", 23) = -1 EPIPE (Broken pipe)
write(2, "Warning: Got SIGPIPE. Where it came from???", 43) = -1 EPIPE (Broken pipe)
write(2, "\n", 1)                       = -1 EPIPE (Broken pipe)
sigreturn()                             = ? (mask now [])
5. в /proc/$pid/fd  есть только fd 1 и 2, 0 нет.
6. При использовании service версии 0.5.9 такой проблемы нет.

Кто виноват? Настоящему демону рекомендуется закрывать все файловые дескрипторы
или он обязан это делать? Но ведь есть ПО, которое вообще демонизироваться не
умеет, но, тем не менее, работает в таком случае.

P.S. Иногда демон почему-то запускается нормально. Вот сейчас, пока писал это
сообщение и проверял ошибку, в последний раз он стал нормально работать.
Какой-то подземный стук :(
Comment 1 Andrew Kornilov 2006-09-02 16:21:55 MSD
Забыл добавить, что при запуске его вручную, он без проблем всегда работает. Оно
и понятно.
Comment 2 Dmitry V. Levin 2006-09-03 15:20:53 MSD
Когда вы запускаете такого псевдодемона вручную, то он "работает" то тех пор,
пока не закончит работу тот сеанс, в котором вы его запустили, а потом
повторится та история, которую вы описали.
initlog, конечно, не подарок, но делать workaround'ы для глючных демонов я не
хочу.