我有一个forks()
的程序,子进程被另一个进程替换,例如A,通过调用execv(A)
来运行。
如何将进程A
的输出重定向到/dev/null
??
我到目前为止尝试过: (处理错误部分,并且不会发生错误)
pid = fork();
//check for errors
if (pid<0){
//handle error
}
//the child process runs here
if (pid==0){
fd = open("/dev/null", O_WRONLY);
if(fd < 0){
//hadnle error
}
if ( dup2( fd, 1 ) != 1 ) {
//handle error
}
if (execv(lgulppath.c_str(),args)<0){
//handle error
}
}
然而,可以理解的是,这不起作用,因为它将子进程的输出重定向到/dev/null
而不是处理A
,后来替换子输出。
有什么想法吗?
(我没有A
过程的代码)
由于
答案 0 :(得分:1)
一种可能性是,流程A写入stderr
而不是stdout
。
然后你必须改为dup2(fd, 2)
。
如果流程A写入stdout
和 stderr
,则必须dup2()
两者:
if (dup2(fd, 1) < 0) {
// error handling
}
if (dup2(fd, 2) < 0) {
// error handling
}