C语言 哪个进程正在退出,为什么在退出(0)后跟随close(0)调用


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作为输入设备。这样子进程将表现为一个恶进程,不会从终端或标准输入读取任何内容。

fork 在父进程中返回进程 id,在子进程中返回0。 主调用进程正在退出,因为pid == 0因此if (pid)在父级中为 true,而在子项中为 false。 然后孩子继续close(0),等等。

最新更新