fork - unix 中的多个分支

标签 fork

main() {
     fork();
     fork();
     printf("Hello world\n");
}

在上面的程序中,父进程产生了一个子进程。子进程又会产生一个孙进程。执行此程序后,我得到以下输出。

Macintosh:unix NightFury$ ./a.out 
Hello world
Hello world
Hello world
Macintosh:unix NightFury$ Hello world

为什么输出不作为单个进程输出?是的,应该打印 4 个“Hello world”,但为什么最后一个打印为单独的进程?

最佳答案

shell 等待第一个 进程结束,然后再次打印 shell 提示符。你有另外三个进程在运行,此时其中两个在 shell 提示出现之前写入输出,一个在出现之后写入输出。每次运行您的程序时,事情可能不会按照这个确切的顺序发生 - 有时您可能早晚会收到 shell 提示符,而不是这个示例。

这就是您可以编写在“后台”持续运行的程序的方法。

关于fork - unix 中的多个分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7699736/

相关文章:

c - 分析多进程程序

c - fork 后 child 创建的文件是否也与 parent 共享?

ruby - Ruby 2.2 中的垃圾收集器引发意想不到的 CoW

c - 为什么每次 fork 后我的 fork 程序的大小都会加倍?

c - 为什么这个程序打印 "forked!"4 次?

python - Aerospike 节点连接过载 - 全局连接问题

c - C 中两个进程共享内存?

c - C 中没有 fork 的无名管道

fork - 如何 fork 一个进程

c++ - 在 Linux x86_64 上使用单例 C++ 进行多处理