if (log_daemon) {
pid_t pid;
log_init();
pid = fork();
if (pid < 0) {
log_error("error starting daemon: %m");
exit(-1);
} else if (pid)
exit(0);
close(0);
open("/dev/null", O_RDWR);
dup2(0, 1);
dup2(0, 2);
setsid();
if (chdir("/") < 0) {
log_error("failed to set working dir to /: %m");
exit(-1);
}
}
У меня есть программа на c, и я не могу понять, что делает exit(0);
в этом случае, из какого процесса она выходит? и для чего используется close(0);
? Будет ли close(0);
даже выполняться?
Этот код предназначен только для проверки возможности создания дочернего процесса?
ОБНОВЛЕНИЕ: хорошо, я получил его из этого вопроса Запустить процесс в фоновом режиме в Linux с помощью C.
По сути, close(0);
закрывает текущий стандартный ввод для дочернего процесса и открывает /dev/null
как устройство ввода. Таким образом, дочерний процесс будет вести себя как демон и ничего не будет читать с терминала или стандартного ввода.