将 stderr 从一个进程写入另一个进程 c++/unix

Writing stderr from one process to another process c++/unix

本文关键字:进程 另一个 c++ unix 一个 stderr      更新时间:2023-10-16

我有一个应用程序,其中父进程通过分布式农场系统(如 lsf/vnc)启动作业。现在我想要的是,每当任何作业启动在其各自的日志中报告任何错误时,错误都应重定向到父进程的主标准输出屏幕。这样就无需单独监视每个作业的日志。我从未在我的代码中使用过管道/信号量,但如果需要,我可以学习。

请提出一些有效的解决方案。我正在研究Linux/Solaris平台。

谢谢

根据启动子流程的方式,有不同的机制来设置其标准句柄。

通常,您必须将其 stderr 句柄设置为与您的 stdout 句柄相同。

请记住,这与你提到的"日志"无关;这是关于你的主题所说的(重定向stderr)。

如果您希望子项的 stderr与父项的 stdout 相同,那么您可以简单地启动父项,将其 stderr 与其 stdout 绑定。 如果cmd是启动父级的命令,请尝试:

$ cmd 2>&1

您可能应该使用 dup2() 库调用,以便将子进程中的 STDERR 复制到所需的文件描述符,例如复制到任何其他描述符的 STDOUT,该描述符可以在父进程之前打开,并在 fork() 之后由子进程继承。尝试阅读"dup2"呼叫的马努拉页面。