2012-07-05 95 views
0

我有一个应用程序,父进程在分布式服务器系统上启动作业,如lsf/vnc。 现在我想要的是每当任何作业启动时在其相应日志中报告任何错误时,应将错误重定向到父进程的主stdout屏幕。这样就不需要分别监控每项工作的日志。 我从未在代码中使用过管道/信号量,但如果需要,我可以了解到这一点。将stderr从一个进程写入另一个进程C++/unix

请建议一些有效的解决方案。我正在开发Linux/Solaris平台。

感谢

+0

所以你想要像'grep ERROR logs/allLogs。*> ttyConsole'(这不会工作,它只是伪代码)。这可能有助于花一点时间编辑你的问题来说明你的用例。对我而言,很难将你的描述和标题与同一问题联系起来(为什么在标题中提到C++,你是否需要/期望修改C++代码以达到你的要求?)祝你好运。 – shellter 2012-07-05 16:59:23

+0

你是如何开始LSF工作?你是否用'system(“lsrun ...”)来调用'lsrun';',你使用的是LSF C API(即'ls_execv()')还是其他一些机制? – 2012-07-06 09:55:06

回答

0

取决于你如何启动子过程有不同的机制如何设置他们的标准手柄。

一般来说,您必须将他们的stderr句柄设置为与您的stdout句柄相同。

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

0

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

$ cmd 2>&1 
0

你或许应该使用DUP2()库调用,以复制STDERR在子进程所需的文件描述符,例如stdout的任何其他描述符,它可以在父进程之前打开,并在fork()之后由子进程继承。 尝试阅读“dup2”呼叫的manula页面。

相关问题