gpt4 book ai didi

c - 为什么我的守护进程在重新启动后没有打印到控制台?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:51:48 24 4
gpt4 key购买 nike

这是我的代码:

#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>

int main(void)
{
pid_t pid;
pid = fork();

if (pid != 0)
{
exit(0);
}

setsid();
chdir("/");

while(1){
sleep(4);
printf("%s\n", "Hello world!");
}

return 0;
}

好的,现在我将打开终端,再次在里面启动 bash,输出将是:

Last login: Tue Jun  2 14:29:49 on ttys000
Korays-MacBook-Pro:~ koraytugay$ bash
bash-3.2$ ./a.out
bash-3.2$ Hello world!
Hello world!
Hello world!
exit
exit
Korays-MacBook-Pro:~ koraytugay$ Hello world!
Hello world!

我想在这里展示的是,我启动了终端,据我所知它启动了 bash,在 bash 中我又启动了一个 bash 并启动了我的程序。

即使我退出了 bash,守护进程仍在运行,这正是我所期待的......

但问题是,如果我退出终端应用程序,然后重新启动它,我将不再看到“Hello World”..

我所看到的是:

Last login: Tue Jun  2 14:30:46 on ttys000
Korays-MacBook-Pro:~ koraytugay$

关闭终端后我的守护进程死了吗?为什么在第一种情况下,即使我退出 bash,父 bash 仍然显示 Hello Worlds,但在我重新启动终端后却没有?

这就是我所说的终端:http://blog.teamtreehouse.com/introduction-to-the-mac-os-x-command-line

我还想添加此信息,

在我执行时在新终端

ps -A 

我仍然看到:

41891 ??         0:00.01 ./a.out
41902 ?? 0:00.01 ./a.out

但是没有文字?为什么没有文本发送到标准输出?据我所知,守护程序仍在执行,终端正在向我显示标准输出,不是吗?

最佳答案

您已经从初始 bash 实例派生出来,该实例将 stdin、stdout 和 stderr 与特定终端连接起来。当您终止 bash 实例时,stdin、stdout 和 stderr 连接到的终端将被关闭,因此对于您的守护进程,写入任何这些描述符实际上是写入链接到已删除文件或设备的描述符。

关于c - 为什么我的守护进程在重新启动后没有打印到控制台?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30595010/

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