<分区>
我正在尝试在 C++ 中使用 fork()
。
然而,它在终端上看起来很奇怪。
如您在屏幕截图中所见,我的代码仅输出其进程的 PID 以及它是子进程还是父进程。 但是当父进程完成时,子进程的输出会打印在新的提示符上。
最重要的是,在 who 程序完成后,它仍然在等待我的命令。
我不明白为什么它仍然在等待输入,如图所示。
<分区>
我正在尝试在 C++ 中使用 fork()
。
然而,它在终端上看起来很奇怪。
如您在屏幕截图中所见,我的代码仅输出其进程的 PID 以及它是子进程还是父进程。 但是当父进程完成时,子进程的输出会打印在新的提示符上。
最重要的是,在 who 程序完成后,它仍然在等待我的命令。
我不明白为什么它仍然在等待输入,如图所示。
最佳答案
fork()
不会生成“空”进程二进制文件。它创建调用进程的克隆,然后两个进程并行运行。这意味着,如果 fork 进程没有execve
进入另一个进程镜像或终止,您将以几乎相同状态的同一程序的两个拷贝同时运行而告终。它们之间的唯一区别是子进程得到一个 0 作为 fork 的返回值,而父进程看到的是子进程的 PID。
您肯定知道这些科幻故事,在这些故事中,一个人突然被复制到量子级别并遇到了他们的原作,他们开始争论谁是原作,谁是拷贝。这正是父进程和子进程在 fork 之后的情况。
And most importantly, it still waits for my command after the who program is done.
不,它没有。它在您的控制台上看起来就像这样:父进程终止,因此 shell 将打印提示。然后子进程在提示后打印它的东西。尝试在 sleep 时打电话,即
~/... > ./hw3 ; sleep 1
关于C++ fork() 在 linux 终端上看起来很奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37191211/