我有一些代码,其中通过分叉创建了几个进程。每个进程都有popen()函数来执行一些shell命令。问题是所有这些进程都使用相同的输入/输出流。这种情况发生时,由于进程同时写入一个流而发生冲突。
有没有办法解决这个问题,所以每个分叉进程都使用它自己的流? 在我的情况下,不允许做任何分叉。
答案 0 :(得分:2)
你必须关闭并重新打开stdin和stdout,如果可能的话,在fork之后,在子进程中。
答案 1 :(得分:1)
当您调用fork()时,您从父进程继承文件描述符(stdin,stdout等)。当你popen它将采取共享stdin / stdout并将其传递到popened进程。听起来你想要在分叉后关闭任何打开的文件描述符,然后重新打开它们。