Задать вопрос
@egorggegor

Почему не работает демон?

Всем привет.
Написал следующий демон, он не работает. Предполагаю это из-за закрытия потоков ввода/вывода, но до конца не понимаю, что нужно исправить, чтобы заработало.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>

int main(int argc, char* argv[])
{
	int fd;
	pid_t process_id = 0;
	pid_t sid = 0;

	process_id = fork();

	if (process_id < 0)
	{
		printf("fork failed!\n");
		exit(1);
	}

	if (process_id > 0)
	{
		printf("process_id of child process %d \n", process_id);
		exit(0);
	}

	umask(0);
	sid = setsid();
	if(sid < 0)
	{
		exit(1);
	}

	chdir("/");

	close(STDIN_FILENO);
	close(STDOUT_FILENO);
	close(STDERR_FILENO);

	while(1) {
		fd = open("/dev/mydev", O_RDONLY);
		read(fd, &buf, 7);
		close(fd);
	}
	return EXIT_SUCCESS;
}


Спасибо.
  • Вопрос задан
  • 352 просмотра
Подписаться 1 Средний 4 комментария
Решение пользователя Владимир Дубровин К ответам на вопрос (2)
1. В read наверняка надо передавать buf а не &buf (точно сказать нельзя т.к. описания нет)
2. В зависимости от того, как вы запускаете процесс, дочерний процесс может получить SIGHUP при закрытии родительского процесса или SIGPIPE на printf, стоит добавить обработчики сигналов до fork().
Ответ написан
Комментировать