【问题标题】:Writing stderr from one process to another process c++/unix将stderr从一个进程写入另一个进程c ++ / unix
【发布时间】:2012-07-05 15:29:47
【问题描述】:

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

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

谢谢

【问题讨论】:

  • 所以你想要类似 'grep ERROR logs/allLogs.* > ttyConsole` 的东西(这行不通,它只是伪代码)。花一点时间编辑您的问题以说明您的用例可能会有所帮助。对我来说,很难让你的描述和标题与同一个问题相关(为什么在你的标题中提到 C++,你需要/期望修改 C++ 代码来满足你的要求吗?)祝你好运。
  • 你是如何开始 LSF 工作的?你是用system("lsrun ..."); 之类的东西调用lsrun,你是在使用LSF C API(即ls_execv())还是其他机制?

标签: c++ unix communication distributed-computing


【解决方案1】:

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

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

请记住,这与您提到的“日志”无关;这是关于您的主题所说的内容(重定向标准错误)。

【讨论】:

    【解决方案2】:

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

    $ cmd 2>&1
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-19
        • 2012-10-25
        • 2021-12-19
        • 2013-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多