Я пытаюсь запустить простой демон на Ubuntu 18.04.2 LTS, который должен записать некоторые данные в файл журнала. Родительский процесс завершается с кодом выхода 0, но файл не создается.
Более того, когда я устанавливаю точку останова после fork()
, pid
, например, равно 835. Когда я запрашиваю имя процесса этой программы с помощью ps -p 835 -o comm=
, я получаю LinuxTest.out <defunct>
, но когда я позволяю программе продолжить и снова запрашиваю имя процесса, выходные данные не отображаются, даже если дочерний процесс все еще должен работать из-за бесконечный l oop позже в коде.
Я использую Visual Studio 2019 с удаленной сборкой. Я также попытался войти на сервер S SH и запустить там встроенную программу с правами sudo, но тоже ничего не произошло.
int main() {
pid_t pid, sid;
// Fork off the parent process
pid = fork();
// if we got a good PID, then we can exit the parent process
if(pid > 0) exit(EXIT_SUCCESS);
else exit(EXIT_FAILURE);
// create new SID for child process
sid = setsid();
if(sid < 0) exit(EXIT_FAILURE);
// change the current working directory
if(chdir("/") < 0) {
exit(EXIT_FAILURE);
}
// change the file mode mask
umask(0);
// close out the standard file descriptors
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);
// Open a log file in write mode.
FILE* fp = fopen("Log.txt", "w+");
while(1) {
sleep(1);
fprintf(fp, "Logging info...\n");
fflush(fp);
}
fclose(fp);
}
Почему точка создания файла не достигнута и почему не сохраняется дочерний процесс?