리눅스 시스템 프로그래밍을 할적에 _exit을 본적이 있는데 exit은 main문제에서 쓰이는 반면 _exit은 자식 프로세스의 동작이 확실시되는 곳에서 사용되는 경우가 있었다. 둘 사이의 차이가 사후처리 즉 뒤처리를 하고 종료하느냐 하지 않느냐의 차이로 알고 있었는데 자식 process에서 쓰이는걸 보면 뭔가 이유가 있겠다 싶었다.
아래가 해당 자세한 내용이다.
exit() 함수는 표준 입출력 정리 루틴을 수행하고 _exit()를 호출한다. exit() 함수는 파일 스트림에 대해서 동일한 작업을 수행하는데, 열려있는 파일의 스트림에 대해서는 fclose() 함수를 호출해서 버퍼에 남은 데이터를 모두 출력(flush)한다
일반적으로 _exit() 함수는 표준 입출력과 관련된 정리 작업을 수행하지 않는 것을 제외하고는 exit() 함수와 비슷한 동작을 수행한다. 만일 vfork()을 수행한다면 메모리를 공유하게 되는데 이때 return 0을 한다면 프로세스들 사이에 공유된 함수의 스택도 삭제되므로 에러를 출력한다
따라서 반드시 vfork에서 자식에서 부모로 반환할 때는 _exit 계열을 사용하는 것이 옳은 방법이다.
아래 블로그에서 도움을 얻었다.
https://noel-embedded.tistory.com/288
vfork와 fork는 비슷하지만 다른점이 있다고 한다. 아래 블로그를 참조하면 차이점을 알 수 있다.
쉽게 말하면 vfork는 자원을 복사하지 않고 공유하기 위해서 사용하는 시스템콜이다. 그래서 주의해서 코딩해야 한다고 한다.
'C & C++ > C' 카테고리의 다른 글
[C] gcc사용법 정리해놓은 블로그 (0) | 2021.10.27 |
---|---|
[C] 포인터가 가질 수 있는 값인 nil이란? (0) | 2021.10.17 |
[C] 메모리와 변수의 lifetime으로 인한 예상치 못한 결과 (0) | 2021.10.08 |
[Linux] Ubuntu c programming - file open /read /write (0) | 2021.09.30 |
[C] C언어 세그멘테이션 오류 (코어 덤프됨) (0) | 2021.09.29 |