2011-02-07 5 views
0

다른 프로세스를 시작하기 위해 fork와 execv를 사용하는 응용 프로그램을 작성했습니다. 상태에 대한 알림을위한 파이프를 만들었고 시작한 프로세스의 주요 입력에서 올바르게 시작되었음을 알리기 위해 몇 바이트를 씁니다. 그렇지 않으면 쓰기 파이프가 분기 된 프로세스에서 닫혀 있기 때문에 read가 0을 반환합니다.UNIX에서 fd 2를 임시로 비활성화하는 방법이 있습니까?

유일한 문제는 프로세스가 실행되지 않을 때 (부재 라이브러리) 문제에 대해 stderr에 메시지가 표시된다는 것입니다. 메시지는 쉘에 무엇이 잘못되었는지 기록됩니다. 나는 그것을 조용히하고 싶다. 그러나 execv 전에 close (2)하면 내가 원하는 것을 메시지가 없습니다. 아직도 나는 fd 2를 stderr에 대해 열어두고 싶다.

답변

1

아마도 응용 프로그램은 stderr 스트림이 전혀없는 것을 좋아하지 않습니다. 오히려

close(2); 

보다 당신이 진심으로 오류 처리를 추가 할 초대 물론

int tmpfd = open("/dev/null", O_WRONLY); 
dup2(tmpfd, 2); 
close(tmpfd); 

을 시도 할 것입니다.

+0

부모 프로세스가 오류 메시지를보고 싶다면'dup (1, 2)'. –

0

감사합니다. 나는 stderr를/dev/null로 리다이렉션하는 것으로 문제를 해결했다. 그러나 나는 두 번 자식 프로세스를 시작해야합니다. 처음에는 억제 된 stderr로 시작되는지 확인한 다음 첫 번째 성공한 경우 다시 시작합니다. 그래서 난 자식 프로세스에 대한 올바른 기본 stderr 및 실패의 경우 쉘 출력을했습니다.

관련 문제