0

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

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

4

2 回答 2

1

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

close(2);

我会尝试

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

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

于 2011-02-07T08:59:50.027 回答
0

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

于 2011-02-07T13:16:06.540 回答