【发布时间】:2015-08-16 04:22:39
【问题描述】:
这是我的代码:
#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
但是没有文字?为什么没有文本发送到标准输出?据我所知,守护进程仍在执行,终端正在向我显示标准输出,不是吗?
【问题讨论】: