我有一個程序forks()
,並且子進程被另一個進程替換,比如說A,它通過調用execv(A)
來運行。如何重定向A
的輸出爲/dev/null
?重定向以execv開頭的進程到/ 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
的過程的代碼)
感謝
您的代碼看起來是正確的。你從哪裏得到一個錯誤?你爲什麼說「這可以理解不起作用」? –
@OlafDietsche,注意在execv之前調用open和dup2,當調用open和dup2時,它們將子進程的輸出重定向到/dev/null.However,當execv被調用時它將替換子進程,並且進程A (替換子進程的那個)現在將輸出到stdout而不是/ dev/null –
@ user1432779'execv'替換可執行映像。它不_更改任何打開的文件。 'dup2'將標準設置爲'/ dev/null',這不會被'execv'改變。 –