2011-02-07 73 views
0

我写了一个应用程序,它使用fork和execv来启动另一个进程。我做了一个关于状态通知的管道,并且从已启动进程的主要条目中,我写了一些字节来通知它已正确启动。否则,由于写入管道已在分叉过程中关闭,所以读取返回0。有没有办法在UNIX中临时禁用fd 2?

唯一的麻烦是当进程没有启动(缺席库)时,我在stderr中收到一条消息。该消息写入shell是什么错误。我宁愿安静地做。但是,如果我在execv之前关闭(2),我不知道我想要的是什么。我仍然想让fd 2开放给stderr。

回答

1

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

close(2); 

我想尝试

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

当然,我们诚邀您加入错误处理。

+0

或`dup(1,2)`,如果父进程想要​​看到错误消息。 – 2011-02-07 09:14:34

0

谢谢你们两位。我解决了将stderr重定向到/ dev/null的问题。但是,我必须启动子进程两次。首先,我会检查它是否会启动,并在第一次成功时再次启动它。所以我有正确的默认stderr的子进程和失败的情况下没有shell输出。

相关问题