gpt4 book ai didi

c++ - 将以 execv 启动的进程重定向到/dev/null

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:05:59 25 4
gpt4 key购买 nike

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

如何将进程 A 的输出重定向到 /dev/null??

到目前为止,我已经尝试过:(handle error部分处理了,没有报错)

    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,稍后替换 child ,输出。

有什么想法吗?(我没有A的进程代码)

谢谢

最佳答案

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

那么你必须用 dup2(fd, 2) 代替。

如果进程 A 写入stdout stderr,您必须dup2()两者:

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

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

关于c++ - 将以 execv 启动的进程重定向到/dev/null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13491707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com