有没有办法在UNIX中临时禁用fd 2?

时间:2011-02-07 08:52:51

标签: fork stderr execv

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

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

2 个答案:

答案 0 :(得分:1)

据推测,应用程序根本不喜欢没有stderr流。而不是

close(2);

我试试

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

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

答案 1 :(得分:0)

谢谢你们俩。我解决了将stderr重定向到/ dev / null的问题。但是我必须两次启动子进程。首先,我检查它是否与抑制的stderr一起启动,然后如果第一次成功则再次启动它。因此,对于子进程,我有正确的默认stderr,如果失败,我没有shell输出。