Обычно стандартный вход демона должен быть подключен к /dev/null
, так что если что-то читается со стандартного входа, вы сразу получаете EOF.Обычно стандартный вывод должен быть связан с файлом - либо файлом журнала, либо /dev/null
.Последнее означает, что все записи будут выполнены успешно, но информация не будет сохранена.Аналогично, стандартная ошибка должна быть подключена к /dev/null
или к файлу журнала.
Все программы, включая демонов, имеют право предполагать, что stdin, stdout и stderr являются соответственно открытыми файловыми потоками.
Обычно для демона целесообразно контролировать, откуда поступают его входные данные и куда выводятся выходные данные.Редко появляется повод для ввода, отличного от /dev/null
.Если код был написан для выживания без стандартного вывода или стандартной ошибки (например, он открывает стандартный канал журнала или, возможно, использует syslog(3)
), тогда может быть целесообразно закрыть stdout и stderr.В противном случае, вероятно, целесообразно перенаправить их на /dev/null
, сохраняя при этом сообщения в файле журнала.В качестве альтернативы, вы можете перенаправить как stdout, так и stderr в файл журнала - остерегайтесь постоянно растущих файлов журнала.
Время отклика от невозможности до невозможности может быть связано с тем, что ваша программа не обращает внимания на EOF в цикле чтения,Это может быть запрос на ввод данных пользователем в / dev / null и чтение ответа из / dev / null, а не возвращение «y» или «n», он пытается снова, что ужасно жует вашу систему.Конечно, код имеет недостатки в том, что он не обрабатывает EOF и подсчитывает, сколько раз он получает неправильный ответ, и перестает быть глупым после разумного количества попыток (16, 32, 64).Программа должна разумно и безопасно закрыть магазин, если ожидает значимого ввода и продолжает его не получать.