_exit(2), _Exit(2)

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

#include <stdlib.h>
void _Exit(int status);

_exit(2)와 _Exit(2)는 같은 기능을 하는 함수입니다. 실행중인 현재 프로세스를 종료하는 시스템콜 함수합니다.

 

 이 함수를 호출하면 프로그램을 종료하면서, open된 file descriptor를 close합니다.

 그러나 fopen(3) 등으로 생성한 stream 중 kernel에 쓰지않고 버퍼링중인 데이터를 fflush(3)하지 않고 

 종료해버리므로 일부데이터를 손실이 될 수 있습니다.

 이를 위해서 보통은 exit(3)함수를 사용합니다. 

 exit(3)은 시스템 콜함수가 아니라 _exit(2)를 wrapping한 일반함수입니다.

 exit(3)은 stream flush하기와 atexit(3) 또는 on_exit(3)로 등록한 종료 handler함수를 호출합니다.

 

 main()함수가 return해도 프로세스를 종료 하지만, main()함수가 아닌 곳에서도 종료하기 위해서는 

 이 _exit(2), _Exit(2), exit(3)함수를 호출합니다.

 

 

파라미터

status
    - 부모 프로세스로 넘겨줄 값을 설정합니다.
    - status가 0이면 보통 정상종료로 인식합니다.
    - 부모 프로세스는 wait(2) 또는 waitpid(2) 등으로 status 값을 받을 수 있습니다.

 

RETURN

 없음
     - 이 함수는 프로그램을 종료시키므로 
       그 다음 로직을 실행하지 않으므로 return 값을 받을 수 없으므로 return이 없습니다.

 


활용 예제

 

Sample). 오류발생시 프로그램 종료

#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include <errno.h>

int myfunc(const char *filename)
{
    FILE *fp;

    if((fp = fopen(filename, "r")) == NULL) {
        fprintf(stderr, "%s file open error: %s\n", filename, strerror(errno));
        _exit(1);
    }

    ......

}

 


see also: Process 관리 함수 

 

 

 

블로그 이미지

사용자 자연&사람

행복한 개발자 programmer since 1995.

댓글을 달아 주세요