@parkito

Как создать демона на си?

Здравствуйте. Помогите, пожалуйста, со следующим вопросом.
Пишу простого демона.
int main() {
    int pid = 0, ppid = 0;
    ppid = fork(); //1
    if(ppid<0)
        exit(1);
    chdir("/"); //2
    pid = setsid();//3
    //4
    demon();
    printf("%d\n", pid);
    close(STDIN_FILENO);
    close(STDOUT_FILENO);
    close(STDERR_FILENO);
    return 0;
}


И хочу вывести его PID. Но printf("%d\n", pid) Выводит мне, почему-то, 2 числа: PID родителя и 1.
Отсюда следует два вопроса. Почему мне выводится 2 числа, хотя printf("%d\n", pid) один? Что я делаю неправильно при создании демона?
  • Вопрос задан
  • 2692 просмотра
Решения вопроса 1
@1001001
fork(); создает второй процесс с pid = 0,
Отсеките новый процесс if (!ppid){...} else return 0;
и уже для него устанавливайте новый индикатор, переходите в корень... и заберите его pid через getpid()
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
zagayevskiy
@zagayevskiy
Android developer at Yandex
Потому что так работает fork. В этом месте программа как бы разделяется на две части - продолжает работать родитель и начинает работать потомок. Определить, где вы находитесь, можно по результату fork. При успешном завершении родителю возвращается PID процесса-потомка, а потомку возвращается 0.
Ответ написан
Комментировать
про fork почитайте
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы