fork 및 execv를 사용하여 하위 프로그램을 생성합니다. 이 프로그램을 백그라운드에서 실행하려면 어떻게해야합니까? 나는 그들을 기다리지 않으려 고 노력했지만 여전히 화면에 출력을 보냅니다. 간부 당신 전에 /dev/null
에/표준 에러execv를 사용하여 백그라운드 프로그램을 생성하는 방법
답변
리디렉션 표준 출력은 :
freopen("/dev/null", "w", stdout);
freopen("/dev/null", "w", stderr);
exec....
이 오류가 발생합니다 : 'FILE *'을 'const char *'로 'FILE * freopen (const char *, const char *, FILE *)'인수로 '2'변환 할 수 없습니다. –
@ z- 버퍼 : 논쟁, 지금 대답을 수정. – Erik
출력을 어떻게 정상적으로 되돌릴 수 있습니까? –
당신은 자식 프로세스의 출력을 리디렉션 파이프를 사용할 수 있습니다. this queston을 살펴보십시오. 파이프에 stdout 및 stderr의 리디렉션을 수행하는 코드가 있습니다.
"배경"에 대한 정의는 무엇입니까? – Gabe
백그라운드에서 프로세스를 실행하는 것은 & 프로그램과 동일합니다. –
당신의 용어가 일관성이 없습니다 -'program &'은 출력을 여전히 화면에 씁니다.이 경우 "background"는 단지 쉘 프롬프트를 풀어 놓는 것입니다. 'program>/dev/null &'당신이 원하는 것을 할 것입니다. – davka