文章目录
- 八、进程信号
- 1.信号
- 未完待续
八、进程信号
1.信号
信号和信号量之间没有任何关系。信号是Linux系统提供的让用户/进程给其他进程发送异步信息的一种方式。
常见信号:
当信号产生时,可选的处理方式有三种:①忽略此信号。②执行该信号的默认处理动作。③自定义处理信号,这种方式称为捕捉(Catch)一个信号。
可以使用 kill -9 杀掉指定进程。
kill -2 可以终止指定进程。不是杀死的。
接下来我们让进程对2号信号做出自定义行为。需要使用 signal 函数。
Makefile:
testSig:Signal.cc
g++ -o $@ $^ -std=c++11
.PHONY:clean
clean:
rm -f testSig
Signal.cc:
#include <iostream>
#include <unistd.h>
#include <sys/types.h>
#include <signal.h>
using namespace std;
void handler(int signo)
{
// 打印收到的信号
cout << "get a signal : " << signo << endl;
}
int main()
{
signal(SIGINT, handler);
while (true)
{
cout << "I am activing, pid : " << getpid() << endl;
sleep(1);
}
return 0;
}
此时进程当接收到2号信号时,就输出了一句话并没有终止进程。
// 忽略信号 ignore
signal(SIGINT, SIG_IGN);
当 signal 函数这样设置时,就代表将 SIGINT 信号忽略。
信号可以由 kill 命令产生,也能够从键盘上产生。比如 键盘上的 Ctrl + C 会被操作系统解释成2号信号。