在Linux和Windows上临时重定向子进程stdout

时间:2014-04-01 19:23:19

标签: winapi redirect process posix pipe

我必须编写一个进程启动程序,它启动另一个进程并将其标准错误读取到某个状态标志,但之后退出。启动的应用程序必须继续运行。我可以成功地将stderr重定向到管道并从启动器中读取它。我担心的是发射器终止后会发生什么。然后关闭管道的读取端,应用程序尝试写入损坏的管道。如何在子进程启动后撤消重定向?

使问题变得更具挑战性的原因是启动程序是跨平台的,必须在POSIX和WinAPI中实现。

非常感谢任何平台上的任何建议。

1 个答案:

答案 0 :(得分:0)

如果父进程(启动器)退出,则最终(1)使用孤立进程,(2)使用stderr管道损坏。这两件事听起来都很糟糕......

一些想法:

  1. 将stderr重定向到一个文件(我想你无论如何都要保留所有错误消息)。父/启动器/或任何其他监视进程可以在任何时候根据需要从文件中读取,而不会出现I / O错误。

  2. 从启动器中分离程序。通常这是使用fork()后跟分叉子进程中的execve()来完成的。