我编写了一个使用fork和execv启动另一个进程的应用程序。我做了一个关于状态通知的管道,从启动过程的主要条目,我写了一些字节来通知它已正确启动。否则,读取返回0,因为写入管道已在分叉过程中关闭。
唯一的麻烦是当进程没有启动(缺少库)时,我在stderr中收到一条关于此的消息。该消息被写入shell有什么问题。我宁愿安静地做。但是,如果我在execv之前关闭(2)我没有消息我想要什么。我仍然希望保持fd 2对stderr开放。
答案 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输出。