왜 자식프로세스에서 exit대신에 _exit를 일반적으로 더 사용 하는가?
-------------------------------------------------------------------
exit()와 _exit()는 약간의 차이가 있다. 이것은 특히 fork()를 사용하느냐,
vfork()를 사용하느냐에 따라 중요성이 더해진다.
exit()와 _exit()의 기본적인 차이는 전자는 사용자모드의의 clean-up 을 수행하며
사용자에게 지원되는 함수형태이다. 반면에 후자는 커널 모드에서 동작한다.
fork()의 자식 프로세스에서 exit()를 사용하는건 일반적으로 틀리다. 왜냐하면
이것을 사용하면 stdio 버퍼가 두번 플러시(flush)되도록 하고 임시 파일들이
예기치 못하게 삭제 된다. C++코드에서 이러한 상황은 최악으로 발전되게 되는데
그 이유는 static 오브젝트에 대한 destructor가 실행이 잘못될 수 있기 때문이다
(일반적인 경우는 아니지만, 데몬프로그램의 경우에 자식 프로세스에서 보다는
부모 프로세스에서 _exit()가 사용되어야 한다. 기본 룰은 exit()는 main함수
내에서 한번만 수행 되어야 한다는 것이다.)
vfork()에 의한 자식 프로세스에서 exit()의 사용은 아주 위험하다. 왜냐!?
부모 프로세스의 상태를 변경 시킬 수 있기 때문이다.
-------------------------------------------------------------------
exit()와 _exit()는 약간의 차이가 있다. 이것은 특히 fork()를 사용하느냐,
vfork()를 사용하느냐에 따라 중요성이 더해진다.
exit()와 _exit()의 기본적인 차이는 전자는 사용자모드의의 clean-up 을 수행하며
사용자에게 지원되는 함수형태이다. 반면에 후자는 커널 모드에서 동작한다.
fork()의 자식 프로세스에서 exit()를 사용하는건 일반적으로 틀리다. 왜냐하면
이것을 사용하면 stdio 버퍼가 두번 플러시(flush)되도록 하고 임시 파일들이
예기치 못하게 삭제 된다. C++코드에서 이러한 상황은 최악으로 발전되게 되는데
그 이유는 static 오브젝트에 대한 destructor가 실행이 잘못될 수 있기 때문이다
(일반적인 경우는 아니지만, 데몬프로그램의 경우에 자식 프로세스에서 보다는
부모 프로세스에서 _exit()가 사용되어야 한다. 기본 룰은 exit()는 main함수
내에서 한번만 수행 되어야 한다는 것이다.)
vfork()에 의한 자식 프로세스에서 exit()의 사용은 아주 위험하다. 왜냐!?
부모 프로세스의 상태를 변경 시킬 수 있기 때문이다.
'Linux' 카테고리의 다른 글
zombie가 무엇인가? (0) | 2013.09.26 |
---|---|
부모 프로세스와 자식 프로세스는 어떻게 통신을 하는가? (0) | 2013.09.26 |
fork() 로 인해 부모에서 자식에게 상속 되는 부분 (0) | 2013.09.26 |
우선 execl함수와 execv함수의 사용법을 알려드릴게요. (0) | 2013.09.26 |
fcntl.h File (File control) (0) | 2013.09.26 |