在应用程序退出之前执行功能

时间:2013-10-31 07:24:31

标签: objective-c cocoa

我想在处理停止/终止信号之前调用一个函数。

有一种简单的方法吗?

1 个答案:

答案 0 :(得分:5)

您可以通过设置信号处理程序来处理SIGTERMSIGINT信号(请参阅signal(3)),但是您无法处理 SIGKILL这就是为什么它应该是对程序使用的最后手段。

如果您始终希望在流程退出之前执行某些操作,请参阅atexit(3)

$ cat sig.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>

static void closedown() {
    printf("running closedown\n");
}

static void sighandler(int signal) {
    exit(1);
}

int main(int argc, const char **argv) {
    signal(SIGTERM, sighandler);
    signal(SIGINT, sighandler);
    atexit(closedown);
    while (1) {
        sleep(1);
        printf("tick\n");
    }
    return 0;
}

$ clang -o sig sig.c
$ ./sig
tick
tick
^Crunning closedown