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

时间:2012-07-05 08:43:23

标签: c++ unix communication distributed-computing

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

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

由于

3 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

$ cmd 2>&1

答案 2 :(得分:0)

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