1

我有一个程序,forks()子进程被另一个进程替换,比如 A,它是通过调用来运行的execv(A)

如何将 processA的输出重定向到/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进程的代码)

谢谢

4

1 回答 1

1

一种可能是,进程 A 写入stderr而不是stdout.

那么你必须dup2(fd, 2)改为。

如果进程 A 写入stdout and stderr,您必须dup2()同时:

if (dup2(fd, 1) < 0) {
    // error handling
}

if (dup2(fd, 2) < 0) {
    // error handling
}
于 2012-11-21T11:06:55.297 回答