linux c中优雅的结束程序示例

此程序主要利用linux c中的信号拦截与处理。

gcc 此程序.c

使用killall 程序名 或 kill 程序名可以输出信号名,注意kill -9 程序获取不了信号,错误处理要手动执行。

#include
#include
#include
#include
#include
#include

int ha_destroy()
{
    //处理程序退出
    return 1;
}

void sig_endler(int signo)
{
    switch(signo)
    {
        case SIGQUIT:
        {
            printf("SIGQUIT program");
            ha_destroy();
            exit(0);
        }
        break;
        case SIGINT:
        {
            printf("SIGINT program");
            ha_destroy();
            exit(0);
        }
        break;
        //优雅退出处理,可以添加必要的操作
        case SIGTERM:
        {
            printf("SIGTERM program");
            ha_destroy();
            exit(0);
        }
        break;
        default:
        {
            //正常退出
            ha_destroy();
            exit(0);
        }
        break;
    }
}

int main()
{
    signal(SIGINT , sig_endler);
    signal(SIGQUIT , sig_endler);
    signal(SIGTERM ,  sig_endler);
    while(1)
    {
        sleep(1);
        //逻辑
    }
}

你可能感兴趣的:(linux,unix)