18031114欧阳东海

导航

实验 七信号

这个作业属于哪个课程 班级课程的主页链接
这个作业的要求在哪里 作业要求的链接地址
学号-姓名 18031114欧阳东海
作业的学习目标
1.了解信号的概念2.掌握信号处理的方法
  1. 编写一个简单的程序并运行,然后向该进程发送不同的信号以观察该进程对接收到信号的反应

在终端编译并运行该程序:

  1. 使用 signal() 函数来捕捉信号。
    通常进程在接收到某种信号后,会根据不同的信号执行默认的操作:
    忽略信号
    终止(杀死)进程
    产生核心转储文件,同时 终止进程
    停止进程
    恢复之前被暂停的进程继续运行
    这里可以 通过 signal() 来改变进程对某个信号的处置方式。
    通过查看手册: man 2 signal

输入完上述代码,编译并运行,然后再给该进程发送信号,观察进程对接收到信号的反应:

在另外一个终端输入 kill 命令来向该进程发送信号:

  1. 通过举例说明 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欧阳东海  阅读(59)  评论(0编辑  收藏  举报