c++ signal 信号退出
Posted qianbo_insist
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++ signal 信号退出相关的知识,希望对你有一定的参考价值。
signal
函数可以指定退出进程,我们在写服务器程序的时候,需要退出可以按ctrl c,这时候程序可以捕获这个信号,来进行处理退出。
signal(SIGINT, OnCtrlC);
1 主程序退出
在程序外部定义一个quit
quit = 0,当quit == 1 时 代表程序需要退出,写捕获函数
int quit = 0;
void OnCtrlC(int) {
cout << "ctrl + c" << endl;
quit = 1;
}
ok,写出主程序如下:
int main(int argc, char* argv[])
{
signal(SIGINT, OnCtrlC);
int i = 0;
int n = 100;
//thread th(func, std::ref(n));
while (true) {
std::this_thread::sleep_for(std::chrono::milliseconds(200));
if (quit == 1)
{
cout << "quit == 1,out" << endl;
break;
}
cout << ++i << endl;
}
th.join();
//cout << "now the n is " << n << endl;
cout << "break here" << endl;
getchar();
return 0;
}
当按下ctrl +c 时
按一个字符退出
线程和主程序同时退出
按照以下程序来写,一个线程和主程序都退出
#include <iostream>
#include <signal.h>
#include <thread>
using namespace std;
int quit = 0;
void OnCtrlC(int) {
cout <<endl << "ctrl + c" << endl;
quit = 1;
}
void func(int &n)
{
while (1)
{
if (quit == 1)
break;
std::this_thread::sleep_for(std::chrono::milliseconds(200));
n++;
}
}
int main(int argc, char* argv[])
{
signal(SIGINT, OnCtrlC);
int i = 0;
int n = 100;
thread th(func, std::ref(n));
while (true) {
std::this_thread::sleep_for(std::chrono::milliseconds(200));
if (quit == 1)
{
cout << "quit == 1,out" << endl;
break;
}
printf("this is %d\\r", i++);
}
th.join();
cout << "now the n is " << n << endl;
cout << "break here" << endl;
getchar();
return 0;
}
以上是关于c++ signal 信号退出的主要内容,如果未能解决你的问题,请参考以下文章