2011-04-27 3 views
0

fork 및 execv를 사용하여 하위 프로그램을 생성합니다. 이 프로그램을 백그라운드에서 실행하려면 어떻게해야합니까? 나는 그들을 기다리지 않으려 고 노력했지만 여전히 화면에 출력을 보냅니다. 간부 당신 전에 /dev/null에/표준 에러execv를 사용하여 백그라운드 프로그램을 생성하는 방법

+0

"배경"에 대한 정의는 무엇입니까? – Gabe

+0

백그라운드에서 프로세스를 실행하는 것은 & 프로그램과 동일합니다. –

+0

당신의 용어가 일관성이 없습니다 -'program &'은 출력을 여전히 화면에 씁니다.이 경우 "background"는 단지 쉘 프롬프트를 풀어 놓는 것입니다. 'program>/dev/null &'당신이 원하는 것을 할 것입니다. – davka

답변

3

리디렉션 표준 출력은 :

freopen("/dev/null", "w", stdout); 
freopen("/dev/null", "w", stderr); 
exec.... 
+0

이 오류가 발생합니다 : 'FILE *'을 'const char *'로 'FILE * freopen (const char *, const char *, FILE *)'인수로 '2'변환 할 수 없습니다. –

+0

@ z- 버퍼 : 논쟁, 지금 대답을 수정. – Erik

+0

출력을 어떻게 정상적으로 되돌릴 수 있습니까? –

1

당신은 자식 프로세스의 출력을 리디렉션 파이프를 사용할 수 있습니다. this queston을 살펴보십시오. 파이프에 stdout 및 stderr의 리디렉션을 수행하는 코드가 있습니다.