C++ C++;带fork程序的shell问题

C++ C++;带fork程序的shell问题,c++,bash,shell,fork,C++,Bash,Shell,Fork,我正在开发一个程序,它可以从父进程和子进程输出大量文本。但是,当我运行程序时,它似乎结束并重新启动一半,因为shell提示出现在输出的中间,程序一旦输出完成就挂起(所以我按下CTRL+C来终止它)。我不确定这是我的代码、shell(bash)还是我正在使用的程序(putty)的问题。下面是我的代码的一个非常简化的版本: #include <iostream> #include <sstream> #include <unistd.h> using namesp

我正在开发一个程序,它可以从父进程和子进程输出大量文本。但是,当我运行程序时,它似乎结束并重新启动一半,因为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;
}

这只发生在我使用fork()的程序中,所以它一定与它有关。有人知道怎么回事吗?

这是因为子进程一旦分叉,就没有真正连接到父进程。因此,当父进程到达程序末尾时,它将退出并让子进程继续在后台运行


您可以通过禁止子进程退出来禁止它。这也将阻止子进程成为孤立进程。

这是因为子进程一旦分叉,就不会真正连接到父进程。因此,当父进程到达程序末尾时,它将退出并让子进程继续在后台运行


您可以通过禁止子进程退出来禁止它。这也将阻止子进程成为孤立进程。

这是因为子进程一旦分叉,就不会真正连接到父进程。因此,当父进程到达程序末尾时,它将退出并让子进程继续在后台运行


您可以通过禁止子进程退出来禁止它。这也将阻止子进程成为孤立进程。

这是因为子进程一旦分叉,就不会真正连接到父进程。因此,当父进程到达程序末尾时,它将退出并让子进程继续在后台运行


您可以通过禁止子进程退出来禁止它。这也将阻止子进程成为孤儿。

这里有什么令人惊讶的?父进程结束,并显示shell提示。子进程有点落后(因为启动进程需要非零时间),所以它的一些输出显示得稍晚一些


如果你不想要这种行为,为什么你首先要发叉?

这里有什么令人惊讶的?父进程结束,并显示shell提示。子进程有点落后(因为启动进程需要非零时间),所以它的一些输出显示得稍晚一些


如果你不想要这种行为,为什么你首先要发叉?

这里有什么令人惊讶的?父进程结束,并显示shell提示。子进程有点落后(因为启动进程需要非零时间),所以它的一些输出显示得稍晚一些


如果你不想要这种行为,为什么你首先要发叉?

这里有什么令人惊讶的?父进程结束,并显示shell提示。子进程有点落后(因为启动进程需要非零时间),所以它的一些输出显示得稍晚一些



如果您不希望出现这种行为,为什么您首先要
fork
ing?

谢谢,但是我可以在哪里等待,以便家长首先完成?还是不可能?我所做的一切都会导致子进程首先输出其所有文本。@user1804208当然是在父进程中。:)父进程中的循环之后可能是一个好地方。这就是我所做的,我在那个地方放置了wait(NULL),子进程总是首先输出。更新:不用担心,我发现我必须更改oss输出的位置!补充一点,在子进程中退出()是一个很好的做法。谢谢,但是我可以在哪里等待以便父进程首先完成?还是不可能?我所做的一切都会导致子进程首先输出其所有文本。@user1804208当然是在父进程中。:)父进程中的循环之后可能是一个好地方。这就是我所做的,我在那个地方放置了wait(NULL),子进程总是首先输出。更新:不用担心,我发现我必须更改oss输出的位置!补充一点,在子进程中退出()是一个很好的做法。谢谢,但是我可以在哪里等待以便父进程首先完成?还是不可能?我所做的一切都会导致子进程首先输出其所有文本。@user1804208当然是在父进程中。:)父进程中的循环之后可能是一个好地方。这就是我所做的,我在那个地方放置了wait(NULL),子进程总是首先输出。更新:不用担心,我发现我必须更改oss输出的位置!补充一点,在子进程中退出()是一个很好的做法。谢谢,但是我可以在哪里等待以便父进程首先完成?还是不可能?我所做的一切都会导致子进程首先输出其所有文本。@user1804208当然是在父进程中。:)父进程中的循环之后可能是一个好地方。这就是我所做的,我在那个地方放置了wait(NULL),子进程总是首先输出。更新:不用担心,我发现我必须更改oss输出的位置!另外,在子进程中退出()是一个很好的做法。
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