Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我有一些代码,其中几个进程是通过分叉创建的。每个进程都有 popen() 函数来执行一些 shell 命令。问题是所有这些进程都使用相同的输入/输出流。当由于进程同时写入一个流而发生冲突时,就会出现这种情况。
有没有办法解决这个问题,让每个分叉的进程都使用它自己的流?在我的情况下,不允许对分叉做任何事情。
您必须在子进程中关闭并重新打开您的标准输入和标准输出,或者如果可能的话,在分叉之后立即关闭并重新打开您的标准输入和标准输出。
当您调用 fork() 时,您会从父进程继承文件描述符(stdin、stdout 等)。当您打开它时,它将采用共享的标准输入/标准输出并将其通过管道传输到打开的进程中。听起来您想在分叉后关闭所有打开的文件描述符,然后重新打开它们。