0

我有一些代码,其中几个进程是通过分叉创建的。每个进程都有 popen() 函数来执行一些 shell 命令。问题是所有这些进程都使用相同的输入/输出流。当由于进程同时写入一个流而发生冲突时,就会出现这种情况。

有没有办法解决这个问题,让每个分叉的进程都使用它自己的流?在我的情况下,不允许对分叉做任何事情。

4

2 回答 2

2

您必须在子进程中关闭并重新打开您的标准输入和标准输出,或者如果可能的话,在分叉之后立即关闭并重新打开您的标准输入和标准输出。

于 2011-02-17T15:55:08.710 回答
1

当您调用 fork() 时,您会从父进程继承文件描述符(stdin、stdout 等)。当您打开它时,它将采用共享的标准输入/标准输出并将其通过管道传输到打开的进程中。听起来您想在分叉后关闭所有打开的文件描述符,然后重新打开它们。

于 2011-02-17T15:57:42.977 回答