这是我的代码:
#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并启动了我的程序。
即使我退出了这场狂欢,恶魔仍然在运行,这正是我所期望的。
但是问题是,如果我退出终端应用程序,然后再次启动它,我将不再看到“ 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
但是没有文字?为什么没有文本发送到标准输出?据我所知,恶魔仍然会执行,而终端正在向我展示标准,不是吗?
这是预料之中的,因为当您退出应用程序写入其内容的终端文件处理程序时,其输出(stdout)消失了。当您再次启动终端时,它不会还原相同的文件处理程序。如果您的应用程序正在写入文件,并且已将其删除,则情况相同。如果您使用相同的路径创建新文件,它将不会继续写入其中。如果要保留输出,则在终端之后,您必须写入文件,例如来自httpd,samba,sshd等守护程序的日志文件。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句