目录
1. SIGINT
2. SIGKILL
3. SIGSTOP与SIGCONT
简介
| Signal | Standard | Action | Comment | 
|---|---|---|---|
| SIGINT | P1990 | Term | Interrupt form keybord | 
| SIGKILL | P1990 | Term | Kill signal | 
| SIGSTOP | P1990 | Term | Interrupt form keybord | 
1. SIGINT
我们在shell交互式进程中常用的ctrl + c 就是对当前运行的程序进行终止。当前命令可以通过signal函数进行自定义处理函数。
signal的函数原型:
/* Set the handler for the signal SIG to HANDLER, returning the old
   handler, or SIG_ERR on error.*/
__sighandler_t signal (int __sig, __sighandler_t __handler);下面我们来看一下如何自定义信号处理函数
/*================================================================
*   Copyright (C) 2022 baichao All rights reserved.
*
*   文件名称:sigint.cpp
*   创 建 者:baichao
*   创建日期:2022年12月12日
*   描    述:
*
================================================================*/
#include <iostream>
#include <signal.h>
#include <unistd.h>
/**
 * 处理SIGINT信号
 **/
void sigintHandler(int signal)
{
    std::cout << "signalHandler get signlal " << signal << std::endl;
}
int main(int argc, char *argv[])
{
    /**
     * ctrl + c
     **/
    signal(SIGINT, sigintHandler);
    while (true)
    {
        sleep(1);
    }
}
运行结果:
在终端进程运行时执行"ctrl + c"命令失效,因为ctrl + c 就是kill -2 pid,但是当前SIGINT信号的处理函数在当前进程中被自定义了,不再使用默认的"Interrupt"策略。
2. SIGKILL
我们最常用的kill -9也就是kill -SIGKILL。当前SIGKILL不能像上面的SIGINT那样在进程中自定义信号处理函数,这样无法自定义的还有下面的SIGSTOP。
/*================================================================
*   Copyright (C) 2022 baichao All rights reserved.
*
*   文件名称:sigkill.cpp
*   创 建 者:baichao
*   创建日期:2022年12月12日
*   描    述:
*
================================================================*/
#include <iostream>
#include <signal.h>
#include <unistd.h>
/**
 * 处理SIGKILL信号
 **/
void sigkillHandler(int signal)
{
    std::cout << "sigkillHandler get signlal " << signal << std::endl;
}
int main(int argc, char *argv[])
{
    /**
     * kill -9
     **/
    signal(SIGKILL, sigkillHandler);
    while (true)
    {
        sleep(1);
    }
}
运行结果:

证实了SIGKILL确实没法自定义处理函数。
3. SIGSTOP与SIGCONT
/*================================================================
*   Copyright (C) 2022 baichao All rights reserved.
*
*   文件名称:sigstop.cpp
*   创 建 者:baichao
*   创建日期:2022年12月13日
*   描    述:
*
================================================================*/
#include <iostream>
#include <signal.h>
#include <unistd.h>
/**
 * 处理SIGSTOP信号
 **/
void sigstopHandler(int signal)
{
    std::cout << "sigstopHandler get signlal " << signal << std::endl;
}
int main(int argc, char *argv[])
{
    /**
     * kill -9
     **/
    signal(SIGSTOP, sigstopHandler);
    while (true)
    {
        sleep(1);
    }
}
运行结果:

我们可以看到: SIGSTOP信号不能在进程中自定义处理函数;
进程收到SIGSTOP信号后,会进入T (TASK_STOPPED or TASK_TRACED),挂起状态或跟踪状态。
如果要使得被挂起的进程重新运行,使用SIGCONT信号触发。

![[附源码]Node.js计算机毕业设计电影票网上订票系统Express](https://img-blog.csdnimg.cn/6241bce620574d6e9a91f0a6a9887d74.png)









![[附源码]Nodejs计算机毕业设计基于web的火车订票管理系统Express(程序+LW)](https://img-blog.csdnimg.cn/0a0f283ce4734e99aa72064e46a5b86a.png)








