2014-01-30 26 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)

SIGTERMSIGKILL提高處理!

+0

我想捕捉自我終止(不僅僅是根據另一個進程的請求)。例如,按Ctrl + \,Ctr + C或斷言,崩潰等等。所以SIGTERM和SIGKILL不是唯一需要處理的信號。我需要一個能處理所有情況的地方。 –

0

您還可以註冊在退出進程時調用的函數。請參閱man atexit

0

您可以爲SIGINT,SIGKILL和SIGSEGV安裝信號處理程序。在信號處理程序中,您可以進行堆棧轉儲,以便稍後調試您的應用程序。在信號處理程序中,將SIGINT,SIGKILL和SIGSEGV的處置設置回默認值。