我正在开发一个从父进程和子进程输出大量文本的程序。但是,当我运行该程序时,它似乎正在结束并在中途重新启动,因为 shell 提示符出现在输出的中间,并且程序在输出完成后挂起(所以我按 ctrl+c 终止它)。我不确定这是我的代码、shell (bash) 还是我正在使用的程序 (putty) 的问题。这是我的代码的一个非常简化的版本:
#include <iostream>
#include <sstream>
#include <unistd.h>
using namespace std;
int main()
{
ostringstream oss;
pid_t pid = fork();
if (pid > 0)
{
for (int i = 1; i <= 15; i++)
{
oss << "Parent message " << i << "\n";
}
}
if (pid == 0)
{
for (int i = 1; i <= 15; i++)
{
oss << "Child message " << i << "\n";
}
}
if (pid < 0)
{
cerr << "Fork failed\n";
}
cout << oss.str();
return 0;
}
这是我得到的输出:
Parent message 1
Parent message 2
Parent message 3
Parent message 4
Parent message 5
Parent message 6
Parent message 7
Parent message 8
Parent message 9
Parent message 10
Parent message 11
Parent message 12
Parent message 13
Parent message 14
Parent message 15
Child message 1
Child message 2
Child message 3
Child message 4
Child message 5
Child message 6
Child message 7
Child message 8
Child message 9
********@***.edu:~/test$ Child message 10
Child message 11
Child message 12
Child message 13
Child message 14
Child message 15
这只发生在我使用 fork() 的程序中,所以它一定与它有关。有人知道怎么回事吗?
最佳答案
这是因为子进程一旦 fork ,并没有真正连接到父进程。所以当父进程执行到程序结束时,就会退出,让子进程继续在后台运行。
你可以通过waiting禁止它以便子进程退出。这也将阻止子进程成为孤立的。
关于fork 程序的 C++ shell 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29331424/