【问题标题】:Is there a way to temporary disable fd 2 in UNIX?有没有办法在 UNIX 中临时禁用 fd 2?
【发布时间】:2011-02-07 08:52:51
【问题描述】:

我编写了一个应用程序,它使用 fork 和 execv 来启动另一个进程。我制作了一个用于通知状态的管道,并从已启动进程的主条目中写入一些字节以通知它已正确启动。否则,read 返回 0,因为写管道已在分叉进程中关闭。

唯一的麻烦是当进程没有启动(缺少库)时,我在 stderr 中收到一条关于此的消息。消息被写入 shell 出了什么问题。我宁愿安静地做。但是,如果我在 execv 之前执行 close(2) ,我就没有我想要的消息。我仍然想保持 fd 2 对 stderr 开放。

【问题讨论】:

    标签: fork stderr execv


    【解决方案1】:

    大概应用程序根本不喜欢没有标准错误流。而不是

    close(2);
    

    我会试试的

    int tmpfd = open("/dev/null", O_WRONLY);
    dup2(tmpfd, 2);
    close(tmpfd);
    

    当然,诚邀您添加错误处理。

    【讨论】:

    • 或者dup(1, 2),如果父进程想看到错误信息。
    【解决方案2】:

    谢谢你们。我解决了将 stderr 重定向到 /dev/null 的问题。但是我必须两次启动子进程。首先,我检查它是否在抑制 stderr 的情况下启动,然后如果第一次成功,我再次启动它。所以我对子进程有正确的默认标准错误,并且在失败的情况下没有shell输出。

    【讨论】:

      猜你喜欢
      • 2017-09-05
      • 1970-01-01
      • 1970-01-01
      • 2021-01-12
      • 1970-01-01
      • 1970-01-01
      • 2018-08-10
      • 2010-12-06
      • 1970-01-01
      相关资源
      最近更新 更多