信号需要注意的地方:
-
信号回调函数里不要做复杂操作,更不要sleep,要尽快处理完,否则会阻塞主线程。
-
信号回调函数里如果需要做复杂操作,可以通过标志位,在创建的子线程里判断标志位,在子线程里执行处理。
C++之signal信号应用实例(一百七十六)-CSDN博客
#include <csignal>
#include <iostream>
void signal_handler(int signal)
{
std::cout << "Received signal " << signal << '\n';
}
int main()
{
// 安装信号处理函数
std::signal(SIGTERM, signal_handler);
std::cout << "Sending signal " << SIGTERM << '\n';
std::raise(SIGTERM);
}
#include <iostream>
#include <stdlib.h>
#include <csignal>
#include <unistd.h>
void sigint_handler(int signal){
std::cout << "Received SIGINT signal" << std::endl;
// 可以在这里进行一些自定义的操作或采取适当的措施
exit(0);
}
int main(){
//注册SIGINT信号处理函数(处理Ctrl + C信号.)
signal(SIGINT, sigint_handler);
std::cout << "Press Ctrl+C to send SIGINT signal..." << std::endl;
//无限循环,等待SIGINT信号的发生
while (true){
sleep(1);
}
return 0;
}
(554条消息) 使用signal函数捕获信号并处理_vimer-hz的博客-CSDN博客
Linux信号signal用法详解及注意事项 - wudymand - 博客园 (cnblogs.com)
(552条消息) Linux 之 信号的忽略,屏蔽和捕捉_说LAI话长的博客-CSDN博客_linux 信号忽略
Linux 下信号的三种处理方式:
1.执行默认动作
2.忽略
3.捕捉
信号的忽略
#include <signal.h>
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
参数:
signum: 信号
handler:处理动作,传SIG_IGN表示忽略
————————————————
版权声明:本文为CSDN博主「说LAI话长」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。