C,C++ & Linux

C/C++ exit(3) _exit(2) _Exit(2)

KyooDong 2020. 5. 22. 16:50
728x90

함수 기능

프로세스를 종료시켜주는 함수입니다.

 

exit(3) 은 사용자 라이브러리 함수로 열려있는 파일(표준 입출력 파일 포함)들을 정리하고, 시그널 핸들러들을을 실행한 뒤 _exit(2) 를 호출합니다.

따라서 vfork() 한 자식 프로세스가 exit(3)을 호출하면 부모 프로세스가 표준 입출력을 사용하지 못하는 문제가 있습니다.

 

_Exit(2)와 _exit(2) 는 시스템 함수로 파일 정리와 시그널 처리부들을 실행하지 않고 프로세스를 종료시킵니다.

 

_exit(2)과 _Exit(2) 는 같은 일을 하는 함수입니다.

 

함수 원형

#include <stdlib.h>

void exit(int status);
void _Exit(int status);

#include <unistd.h>
void _exit(int status);

 

매개변수

status

프로세스의 종료 상태를 의미합니다.

보통 0 을 리턴하면 정상 종료

0이 아닌 정수를 리턴하면 비정상 종료로 인식합니다.

 

예제

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <memory.h>

int main(int argc, char *argv[]) {
    // _IOLBF, 즉 라인버퍼인 표준 출력파일은 개행문자를 만나지 않으면 화면에 보이지 않습니다.
    // exit() 함수는 표준입출력 파일을 정리해주기 때문에 프로스세가 종료되면 화면에 보였지만
    // _exit() 함수는 표준입출력파일을 정리해주지 않기에 보이지 않습니다.
    printf("출력되지않는 구문");
    _exit(0);
}

 

결과

 

 

 

 

 

 

 

 

 

 

리눅스시스템프로그래밍 저자 : 홍지만
https://book.naver.com/bookdb/book_detail.nhn?bid=14623672

책에 기술된 예제 프로그램입니다. 책 내부에는 훨씬 더 많은 자료가 있습니다. (개인적으로 좋았습니다.)