56 lines
1.2 KiB
C++
56 lines
1.2 KiB
C++
![]() |
#include <iostream>
|
|||
|
#include <unistd.h>
|
|||
|
#include <signal.h>
|
|||
|
using namespace std;
|
|||
|
|
|||
|
void func(int signum) {
|
|||
|
printf("接收到一个信号 %d\n",signum);
|
|||
|
}
|
|||
|
|
|||
|
int main() {
|
|||
|
|
|||
|
// 信号的处理
|
|||
|
//sighandler_t signal(int signum, sighandler_t handler):
|
|||
|
// 信号编号 处理函数
|
|||
|
//
|
|||
|
// signal(1, SIG_DFL); 对信号1恢复默认处理方式
|
|||
|
// signal(1, SIG_IGN); 对信号1忽略
|
|||
|
//
|
|||
|
//通过发送0的信号,可以检测程序是否存活
|
|||
|
|
|||
|
signal(1, func); //接受1的信号并使用func()处理 注意! func()不要加()
|
|||
|
|
|||
|
alarm(5); //闹钟, 5秒后向本程序发送14的信号,只有一次
|
|||
|
signal(14, func);
|
|||
|
|
|||
|
// 信号的发送
|
|||
|
//int kill(pid_t pid, int sig);
|
|||
|
// pid > 0 发送给进程号pid的进程
|
|||
|
// pid == 0 发给相同进程组的所有进程
|
|||
|
// pid = -1 广播给系统内所有进程
|
|||
|
|
|||
|
|
|||
|
|
|||
|
while(1) sleep(1);
|
|||
|
return 0;
|
|||
|
}
|
|||
|
/*
|
|||
|
信号类型
|
|||
|
SIGHUP 1 A 挂起或控制进程终止
|
|||
|
-> SIGINT 2 A C + c
|
|||
|
SIGFPE 8 C 浮点异常
|
|||
|
-> SIGKILL 9 AEF kill -9 强制杀死
|
|||
|
SIGSEGV 11 C 无效的内存引用
|
|||
|
SIGPIPE 13 A 管道破裂
|
|||
|
-> SIGALRM 14 A 闹钟alarm()信号
|
|||
|
-> SIGTERM 15 A kill默认
|
|||
|
-> SIGCHLD 17 B 子进程结束
|
|||
|
|
|||
|
A 终止进程
|
|||
|
B 忽略
|
|||
|
C 终止进程并core dump
|
|||
|
D 暂停
|
|||
|
E 不能捕获
|
|||
|
F 不可忽略
|
|||
|
*/
|