#include<iostream>
#include<string>
#include<unistd.h>
#include<signal.h>
#include<sys/types.h>
#include<stdlib.h>
// 定义一个全局变量cnt,用于记录循环次数
int cnt =0;
/**
* @brief 处理信号的函数
*
* 当程序接收到SIGALRM信号时,会调用此函数进行处理。
* 主要功能是打印接收到的信号并退出程序。
*
* @param sig 接收到的信号编号
*/
void catchsig(int sig)
{
std::cout<<"catchsig"<<sig<<std::endl;
exit(0);
}
/**
* @brief 程序的主入口
*
* 该函数首先打印命令行参数,然后设置SIGALRM信号的处理函数,
* 并在1秒后触发该信号,从而实现程序的定时退出。
*
* @param argc 命令行参数的数量
* @param argv 命令行参数的字符串数组
* @return int 程序退出状态
*/
int main(int argc, char* argv[])
{
// 遍历并打印命令行参数
for(int i = 0; i < argc;i++)
{
std::cout << argv[i] << std::endl;
}
// 设置SIGALRM信号的处理函数为catchsig
signal(SIGALRM,catchsig);
// 在1秒后触发SIGALRM信号
alarm(1);
// 初始化一个局部变量cnt,注释掉使其失效
// int cnt = 0;
// 无限循环,等待信号处理
while (true)
{
// 打印循环次数,注释掉使其失效
//std::cout<<"cnt"<<cnt++<<std::endl;
}
return 0;
}
linux学习28 信号处理
最新推荐文章于 2024-08-19 17:07:48 发布