重新启动后,为什么我的守护进程无法打印到控制台?

科雷旅

这是我的代码:

#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

但是没有文字?为什么没有文本发送到标准输出?据我所知,恶魔仍然会执行,而终端正在向我展示标准,不是吗?

安东·克罗斯涅夫(Anton Krosnev)

这是预料之中的,因为当您退出应用程序写入其内容的终端文件处理程序时,其输出(stdout)消失了。当您再次启动终端时,它不会还原相同的文件处理程序。如果您的应用程序正在写入文件,并且已将其删除,则情况相同。如果您使用相同的路径创建新文件,它将不会继续写入其中。如果要保留输出,则在终端之后,您必须写入文件,例如来自httpd,samba,sshd等守护程序的日志文件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Flask无法打印到控制台

为什么我的数组返回的方法无法打印到控制台?

为什么这些goroutine无法打印到控制台?

为什么Java中的System.out.println()打印到控制台?

为什么Gson会漂亮地打印到控制台,而不打印到文件?

为什么在以下代码中将320.04号打印到控制台?

为什么Spring Boot Batch应用程序无法打印到控制台?

为什么Mybatis Force将log4j DEBUG信息打印到控制台

为什么Python多处理守护进程无法打印到标准输出?

为什么将这个chai-as-promise AssertionError打印到控制台,但不打印到我的Mocha测试运行程序?

我的EC2实例似乎已关闭,并且无法从控制台重新启动

使我的switch语句正常工作并打印到控制台

Visual Studio 2017(v15.6.2)在构建后不会重新启动控制台

我正在尝试学习如何编写循环,但似乎无法打印到控制台

为什么此常量无法打印到控制台?它只是空白

为什么不将此行打印到控制台?

PL / SQL无法打印到控制台(在SQLDeveloper中)

为什么Python在print()输出之前将异常打印到控制台

无法在Xcode中打印到控制台

如何从故障恢复控制台重新启动?

我什么时候可以期望将“ stdout”打印到控制台

为什么我的系统日志在重新启动后无法持久保存?

服务器客户端控制台重新启动后,Node.js请参阅进程日志

为什么这个并行过程不将输出写入文件,而是打印到控制台?

为什么控制台无法打印我期望的字符

Clion无法打印到控制台

分配变量后,无法将日志文件中的尾部数据打印到 PowerShell 控制台

为什么异常方法的 printstacktrace() 在调用时不打印到控制台?

为什么这不将 console.log(score) 打印到控制台?