У меня есть программа, которая 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
Процесс)
Спасибо
Возможно, что процесс A пишет в stderr
вместо stdout
,
Тогда вы должны dup2(fd, 2)
вместо.
Если процесс А пишет в stdout
а также stderr
, Вы должны dup2()
и то и другое:
if (dup2(fd, 1) < 0) {
// error handling
}
if (dup2(fd, 2) < 0) {
// error handling
}
Других решений пока нет …