实验 七信号
这个作业属于哪个课程 | 班级课程的主页链接 |
---|---|
这个作业的要求在哪里 | 作业要求的链接地址 |
学号-姓名 | 18031114欧阳东海 |
作业的学习目标 | |
1.了解信号的概念2.掌握信号处理的方法 |
- 编写一个简单的程序并运行,然后向该进程发送不同的信号以观察该进程对接收到信号的反应
在终端编译并运行该程序:
- 使用 signal() 函数来捕捉信号。
通常进程在接收到某种信号后,会根据不同的信号执行默认的操作:
忽略信号
终止(杀死)进程
产生核心转储文件,同时 终止进程
停止进程
恢复之前被暂停的进程继续运行
这里可以 通过 signal() 来改变进程对某个信号的处置方式。
通过查看手册: man 2 signal
输入完上述代码,编译并运行,然后再给该进程发送信号,观察进程对接收到信号的反应:
在另外一个终端输入 kill 命令来向该进程发送信号:
- 通过举例说明 alarm() 函数和 setitimer() 函数的使用。
先分别查看两个函数的手册:
man 2 alarm :
man 2 setitimer :
通过命令 man 7 signal 可以查看当前系统信号的清单:
从上面可以看到 alarm() 函数在计时结束后会发生 SIGALRM 信号给当前进程,进程对 SIGALRM 信号的缺省动作是结束进程。
下面一个非常简单的例子:
虽然程序中有无限循环,不断输出字符串 process will finish! ,由于调用了 alarm(1) 函数,alarm 函数会在1秒后给该进程发送 SIGALRM 信号,然后进程结束。
接下来继续看一个程序设定了两次定时炸弹,第一次设定 5 秒后爆炸,设定后过了 2 秒,再设定了一个3 秒后爆炸的定时炸弹。
这里计时时间到了并不会结束进程,因为编写了信号捕捉函数,产生 SIGALRM 信号后会输出字符串 Bomb!! , 可以键盘按键组合结束进程,这里用了 CTRL+C 。
接下来用 setitimer() 函数实现 alarm() 函数
posted on 2021-06-14 14:27 18031114欧阳东海 阅读(60) 评论(0) 编辑 收藏 举报