如何在进程进程终止时执行函数

tech2022-11-22  85

通过Linux系统调用来完成这个操作,atexit( )和on_exit( )。

atexit( )函数原型:

#include <stdlib.h> int atexit (void (*function)(void));

示例:

#include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <signal.h> static void my_handler (void) { printf("my handler!\n"); } int main() { atexit(my_handler); //注册自己的进程结束处理函数 printf("test atexit!\n"); return 0; }

运行结果:

on_exit( )使用方法一样。 函数原型:

#include <stdlib.h> int on_exit(void (*function)(int status, void *arg);

通过信号终止进程时,上面注册的函数执行于signal_handler( )之后。 示例:

#include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <signal.h> static void signal_handler (int signo) { if (signo == SIGINT) { printf("Caught SIGINT!\n"); exit(EXIT_FAILURE); } else if (signo == SIGTERM) printf("Caught SIGTERM!\n"); else { fprintf(stderr, "Unexpected signal!\n"); exit(EXIT_FAILURE); } exit(EXIT_SUCCESS); } static void my_handler (void) { printf("my handler!\n"); } int main() { atexit(my_handler); if (signal (SIGINT, signal_handler) == SIG_ERR) { fprintf(stderr, "Cannot handle SIGINT!\n"); exit(EXIT_FAILURE); } if (signal (SIGTERM, signal_handler) == SIG_ERR) { fprintf(stderr, "Cannot handle SIGTERM!\n"); exit(EXIT_FAILURE); } if (signal (SIGPROF, SIG_DFL) == SIG_ERR) { fprintf(stderr, "Cannot reset SIGPROF!\n"); exit (EXIT_FAILURE); } if (signal (SIGHUP, SIG_IGN) == SIG_ERR) { fprintf(stderr, "Cannot ignore SIGHUP!\n"); exit (EXIT_FAILURE); } for (;;) pause(); printf("test atexit!\n"); return 0; }

运行结果(通过ctrl+c和kill pid方式终止进程)

最新回复(0)