我有一个应用程序,其中父进程通过分布式场系统(如 lsf/vnc )启动作业。现在我想要的是,只要任何作业启动在其各自的日志中报告任何错误,错误应该被重定向到父进程的主标准输出屏幕。这样就不需要单独监控每个作业的日志。我从未在我的代码中使用过管道/信号量,但如果需要我可以学习。
请提出一些有效的解决方案。我在 Linux/Solaris 平台上工作。
谢谢
我有一个应用程序,其中父进程通过分布式场系统(如 lsf/vnc )启动作业。现在我想要的是,只要任何作业启动在其各自的日志中报告任何错误,错误应该被重定向到父进程的主标准输出屏幕。这样就不需要单独监控每个作业的日志。我从未在我的代码中使用过管道/信号量,但如果需要我可以学习。
请提出一些有效的解决方案。我在 Linux/Solaris 平台上工作。
谢谢
根据您启动子流程的方式,有不同的机制如何设置它们的标准句柄。
通常,您必须将其 stderr 句柄设置为与您的 stdout 句柄相同。
请记住,这与您提到的“日志”无关;这是关于你的主题所说的(重定向stderr)。
您可能应该使用 dup2() 库调用,以便将子进程中的 STDERR 复制到所需的文件描述符,例如复制到任何其他描述符的 STDOUT,它可以在父进程之前打开并在 fork( )。尝试阅读“dup2”调用的 manula 页面。
如果您希望子项的标准错误与父项的标准输出相同,那么您可以简单地启动父项,并将其标准错误绑定到其标准输出。如果cmd
是启动父级的命令,请尝试:
$ cmd 2>&1