实验七 信号
| 项目 | 内容 |
|---|---|
| 这个作业属于哪个课程 | https://edu.cnblogs.com/campus/nchu/2020SpringSystemAndApplication |
| 这个作业的要求在哪里 | https://edu.cnblogs.com/campus/nchu/2020SpringSystemAndApplication/homework/10760 |
| 学号-姓名 | 17041530-严喆皓 |
| 作业学习目标 | 1、了解信号的概念 2、掌握信号处理的方法 |
1.编写一个简单的程序并运行,然后向该进程发送不同的信号以观察该进程对接收到信号的反应。



1)在当前终端通过按键组合向该进程发送信号 CTRL+C、CTRL+Z、CTRL+\ 观察三种信号及其对应的进程反应,如下所示。

2) 另开启一个终端,在终端通过输入 kill 命令来给进程发送信号,进程的 pid 在程序运行的第一行输出,每次运行程序的时候 pid 是不同的, 我们可以在终端通过输入 kill -l 来查看当前系统当中的信号列表 对于 kill 命令我们可以查看手册: man kill


3) 我们编写一个简单的程序,该程序调用 kill() 函数向某个进程发送信号








程序在运行1秒钟后被 SIGALRM 信号结束。
分析alarm() 函数和 setitimer() 函数的区别:
alarm函数在指定数秒后会给当前进程发送SIGALRM信号。进程收到该信号,默认动作终止。
setitimer可用来实现延时和定时的功能
4.举例说明信号集操作函数的使用




5.举例说明对阻塞信号与未决信号的理解
在一个进程中,保存了两个信号集(在PCB中),分别是阻塞信号集,还有一个未决信号集。当你使用sigprocmask的时候,就会修改阻塞信号集。 当你的进程一收到信号且该信号被阻塞,它首先进入到未决信号集中(就是一个 sigset_t ), 当未决信号集中的信号被信号处理函数(你自己定义的或者系统默认的)处理,就会从未决信号集中删除。 如果一个信号加入阻塞信号集,该信号的信号处理函数就不会被调用。 通过 man sigprocmask 来查看手册:










浙公网安备 33010602011771号