每个分叉进程都有不同的输入/输出流

发布于 2024-10-18 06:43:09 字数 165 浏览 3 评论 0原文

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

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

I have some code, where several processes are created by forking. Every process have popen() function to execute some shell command. Problem is that all of these processes use same input/output stream. This cause situation, when collision occurs because of processes write to one stream simultaneously.

Is there any way to resolve that problem, so that every forked process used it's own stream?
It is not allowed to do anything with forking in my case.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

北风几吹夏 2024-10-25 06:43:09

您必须在子进程中的 fork 之前或(如果可能)在 fork 之后立即关闭并重新打开 stdin 和 stdout。

You'll have to close and reopen your stdin and stdout before or, if possible, right after the fork, in the child process.

迎风吟唱 2024-10-25 06:43:09

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

When you call fork(), you inherit the file descriptors (stdin, stdout, etc) from the parent process. When you popen it's going to take the shared stdin/stdout and pipe it into the popened process. It sounds like you want to close any open file descriptors after forking, and reopen them.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文