gpt4 book ai didi

c - Ubuntu-Daemon 不创建文件

转载 作者:行者123 更新时间:2023-12-04 18:57:07 25 4
gpt4 key购买 nike

我正在尝试在 Ubuntu 18.04.2 LTS 上运行一个简单的守护程序,它应该将一些数据写入日志文件。父进程以退出代码 0 终止,但没有创建文件。

此外,当我在 fork() 之后设置断点时, pid以 835 为例。当我使用 ps -p 835 -o comm= 查询该程序的进程名称时, 我得到 LinuxTest.out <defunct> ,但是当我让程序继续并再次查询进程名称时,没有显示任何输出,即使由于代码后面的无限循环,子进程应该仍在运行。

我正在使用带有远程构建的 Visual Studio 2019。我还尝试通过 SSH 登录服务器并使用 sudo 权限在那里执行构建的程序,但也没有任何 react 。

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);
}

为什么没有达到创建文件的目的,为什么不让子进程保持事件状态?

最佳答案

你有:

if(pid > 0) exit(EXIT_SUCCESS);
else exit(EXIT_FAILURE);

当以更正统的样式格式化时,这与以下内容相同:
if (pid > 0)
exit(EXIT_SUCCESS);
else
exit(EXIT_FAILURE);

如果 fork()成功,父进程成功退出,子进程以失败状态退出;如果 fork()失败,父级以失败状态退出。

将其更改为:
if (pid > 0)
exit(EXIT_SUCCESS);
else if (pid < 0)
exit(EXIT_FAILURE);

/* Child is running here: pid == 0 */

关于c - Ubuntu-Daemon 不创建文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59630067/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com