2014-01-30 4 views

답변

0

atexit()을 사용하십시오. 프로그램이 정상적으로 종료되면 함수를 호출합니다.

샘플 코드 :

#include <stdio.h>  
#include <stdlib.h>  
void funcall(void); 
void fnExit1 (void) 
{ 
    printf ("Exit function \n"); 
} 

int main() 
{ 
    atexit (fnExit1); 
    printf ("Main function start\n"); 
    funcall(); 
    printf ("Main function end\n"); 
    return 0; 
} 

void funcall(void) 
{ 
    sleep(2); 
    exit(0); 
} 

출력 :

Main function start 
Exit function 
+0

atexit()는 응용 프로그램의 모든 스레드가 종료 된 후에 실행됩니까? –

+0

@LunarMushrooms 예 – sujin

0

당신은 --->int raise (int sig)

을 시도하고 SIGTERM 또는 SIGKILL가 발생할 때 처리 할 수 ​​없습니다!

+0

다른 프로세스에서 요청할 때뿐만 아니라 자체 종료를 포착하고 싶습니다. 예를 들어 Ctrl + \, Ctr + C 또는 어설 션, 크래시 등으로 처리해야하므로 SIGTERM 및 SIGKILL 만 처리해야하는 신호는 아닙니다. 모든 사건을 처리 할 수있는 단일 장소가 필요합니다. –

0

프로세스를 종료 할 때 호출 할 함수를 등록 할 수도 있습니다. man atexit

0

SIGINT, SIGKILL 및 SIGSEGV에 대한 신호 처리기를 설치할 수 있습니다. 시그널 핸들러에서는 나중에 시그널 핸들러에서 SIGINT, SIGKILL, SIGSEGV의 처리를 디폴트로 되돌릴 수 있도록 스택 덤프를 취할 수있다.

관련 문제