- 信号(signal)是一种软件中断,它提供了一种处理异步事件的方法,也是进程间惟一的异步通信方式。信号可由硬件中断(按下组合键/除0/无效的存储访问)或软中断(进程调用kill或sigqueue发送信号)产生
#include <csignal>
#include <iostream>
#include <unistd.h>
#include <time.h>
using namespace std;
void signalUsr1Handler(int signum) {
cout << "interrup signal: " << signum << " received." << endl;
//exit(signum);
}
void signalKillHandler(int signum) {
cout << "signal kill: " << signum << " received." << endl;
}
int main(int argc, char* argv[]) {
signal(SIGUSR1, signalUsr1Handler);
signal(SIGKILL, signalKillHandler);
while(1) {
const time_t now = time(NULL);
cout << asctime(localtime(&now)) << "going to sleep..." << endl;
sleep(3);
}
//cout << "going to pause..." << endl;
//pause();
//
return 0;
}
依次发送kill -SIGUSR1 24021和kill -SIGKILL 20241可得到
Paste_Image.png
上面的示例中,尽管注册了SIGKILL的处理函数,并不起作用,是因为SIGKILL和SIGSTOP这两个信号不能被忽略,同时这两个信号也不能被捕获和阻塞。
另外:pause:将进程挂起等待信号,直到信号到来,才会继续处理
网友评论