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

将stderr从一个进程写入另一个进程c++/unix,c++,unix,communication,distributed-computing,C++,Unix,Communication,Distributed Computing,我有一个应用程序,其中父进程通过分布式服务器场系统(如lsf/vnc)启动作业。 现在我想要的是,无论何时,只要任何作业启动在各自的日志中报告了任何错误,错误都应该重定向到父进程的主标准输出屏幕。这样就不需要单独监视每个作业的日志。 我从未在代码中使用过管道/信号量,但如果需要,我可以学习 请提出一些有效的解决方案。我在Linux/Solaris平台上工作 谢谢根据您启动子流程的方式,有不同的机制来设置它们的标准句柄 通常,您必须将它们的stderr句柄设置为与stdout句柄相同 请记住,这与

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

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


谢谢

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

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


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

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

$ cmd 2>&1

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

因此您需要类似“grep错误日志/allLogs.*>ttyConsole”的内容。这不起作用,它只是伪代码。花一点时间编辑您的问题以说明您的用例可能会有所帮助。对我来说,很难让你的描述和标题与同一个问题相关,为什么在标题中提到C++,你是否需要/修改C++代码来实现你的要求?祝你好运。你是如何开始LSF工作的?你是用systemlsrun之类的东西来调用lsrun。。。;,您使用的是LSF C API,即ls_execv还是其他机制?