Демон Linux и STDIN / STDOUT

Я работаю над демоном linux и имею некоторые проблемы с stdin / stdout. Обычно из-за природы демона у вас нет stdin или stdout. Однако у меня есть функция в моем демоне, которая вызывается при первом запуске демона, чтобы указать различные параметры, необходимые для успешного запуска демона. Когда эта функция вызывается, терминал становится настолько вялым, что мне приходится запускать отдельную оболочку и убить демона с помощью top, чтобы получить ответную подсказку. Теперь я подозреваю, что это как-то связано с процессом разветвления, закрывающим stdin / stdout, но я не совсем уверен, как я могу это обойти. Если бы вы, ребята, могли пролить свет на ситуацию, я был бы очень признателен. Спасибо.

Редактировать:

int main(argc, char *argv[]) {

/* setup signal handling */

/* check command line arguments */

pid_t pid, sid;

pid = fork();

if (pid < 0) {
exit(EXIT_FAILURE);
}

if(pid > 0){
exit(EXIT_SUCCESS);
}

sid = setsid();

if(sid < 0) {
exit(EXIT_FAILURE);
}

umask(027);

/* set syslogging */

/* do some logic to determine wether we are running the daemon for the first time and if we are call the one time function which uses fgets() to recieve some input */

while(1) {

/* do required work */

}

/* do some clean up procedures and exit */

return 0;
}

Вы, ребята, упомянули об использовании файла конфигурации. Это именно то, что я делаю, чтобы сохранить параметры, полученные через ввод. Однако мне все еще сначала нужно получить их от пользователя через стандартный ввод. Логика определения того, запускаем ли мы первый раз, основана на существовании файла конфигурации.

9
задан Error1f1f 2 February 2011 в 01:46
поделиться