参考网址:
https://zh.cppreference.com/w/cpp/header
https://www.runoob.com/cplusplus/cpp-standard-library.html
工具库
csignal-信号管理的函数与宏常量
typedef
std::sig_atomic_t 即使在信号所为的异步中断的存在中,都能作为原子实体访问的整数类型。
宏
—— 定义信号处理类型
SIGTERM 发送给程序的终止请求
SIGSEGV 非法内存访问(分段错误)
SIGINT 外部中断,通常为用户所起始
SIGILL 非法程序映像,例如非法指令
SIGABRT 异常终止条件,例如为 std::abort() 所起始
SIGFPE 错误算术运算,例如除以零
——定义信号处理策略
SIG_DFL 默认信号处理
SIG_IGN 忽略信号
——signal 的返回值,说明遇到错误
SIG_ERR void (*)(int) 类型的值。
函数
*signal(int sig, * handler); 为信号 sig 设置处理函数。可设置信号处理函数以令默认处理发生、信号被忽略或用户定义函数得到调用。sig - 要设置信号处理函数的信号。handler - 信号处理函数。这必须是下列之一:SIG_DFL 宏、SIG_IGN 宏、指向函数指针。成功时返回先前的信号处理函数,失败时为 SIG_ERR (某些实现上能禁用设置信号处理函数)。
例程
“”“
#include
#include
namespace
{
volatile std::sig_atomic_t gSignalStatus;
}
void signal_handler(int signal)
{
gSignalStatus = signal;
}
int main()
{
// 安装信号处理函数
std::signal(SIGINT, signal_handler);
std::cout << "SignalValue: " << gSignalStatus << ‘\n’;
std::cout << "Sending signal " << SIGINT << ‘\n’;
std::raise(SIGINT);
std::cout << "SignalValue: " << gSignalStatus << ‘\n’;
}“”“
输出:
SignalValue: 0
Sending signal 2
SignalValue: 2
int raise( int sig ); 发送信号 sig 给程序。调用信号处理函数(用 std::signal() 函数指定)。若仍未用 std::signal() 设置用户定义的处理策略,则忽略信号还是调用默认处理函数是实现定义的。成功时返回 0 ,失败时为非零值。
来源:CSDN
作者:pitorlin
链接:https://blog.csdn.net/qq_38428277/article/details/103578389