0
点赞
收藏
分享

微信扫一扫

基于VS2019 C++的跨平台(Linux)开发(1.4)——信号

seuleyang 2022-03-17 阅读 81

一、目标

  • 信号概念
  • 信号安装signal、sigaction
  • 信号集操作函数
  • 时钟

二、信号

1、概念

  • 信号是系统响应某些状况而产生的事件,进程在接收到信号时会采取相应的行动。可以是因为某些错误条件而产生的,比如内存段冲突、浮点处理器错误或者非法指令等
  • 进程可以生成信号、捕捉并响应信号或屏蔽信号

2、用途

进程间通信,之前提到进程之间的数据是不能进行互通的,所以就要用到进程间通信技术,这个信号就是其中之一 ,就类似Qt里面的信号和槽(在界面切换的时候可以用到),(开发Qt的时候实际他就是参照linux内核编程进行开发)

3、回顾kill命令

kill不是杀死而是发送:我们要突破之前的一个错误认知,单纯的认为kill -9 pid就是杀死进程,实际上并不是这样,要把他理解为发送第九号信号(SIGKILL),去结束后面的pid所对应的进程。查询kill支持的信号,如下图所示

 从上图仔细观察会发现,中间少了32号、33号,这其实是做一个分界线,1-31被归为不可靠信号,43到之后的被归为可靠信号(有兴趣自行了解)

4、信号名称

信号的名称是在头文件 signal.h里定义的,部分名称如图

5、进程与信号(signal库函数)

如果一个进程想要通知另一个进程做一些事情,就可以利用信号,所以涉及到signal库函数,如下

举例说明

int kill(pid_t pid, int sig);

 进程可以通过调用kill向包括它本身在内的另一个进 程发送信号。如果程序没有发送该信号的权限,对 kill的调用就将失败。

 kill函数的作用是把参数sig给定的信号发送给标识号为pid的进程。 要想发送一个信号,发送者进程必须拥有相应的权限。这通常意味着两个进程必须拥有同样的用户ID

举报

相关推荐

0 条评论