将使用execv启动的进程重定向到/ dev / null

时间:2012-11-21 10:54:36

标签: c++ linux fork stdout

我有一个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过程的代码)

由于

1 个答案:

答案 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
}