zoukankan      html  css  js  c++  java
  • 信号

    项目 内容
    这 个 作 业 属 于 哪 个 课 程 班 级 地 址
    这个作业要求在哪里 作 业 要 求 地 址
    学号-姓名 17041506-张政
    学习目标 1.了解信号的概念 2.掌握信号处理的方法

    1.编写一个简单的程序并运行,然后向该进程发送不同的信号以观察该进程对接收到信号的反应。

    • 代码如下:
    • 在终端1中运行代码,并分别向该进程发送信号 CTRL+C 、 CTRL+Z 、 CTRL+ ,观察进程的反应。
      如图1:
    • 在终端2中输入kill -l观察当前信号列表,并运行hellosignal文件
      如图2:
    • 得到pid3344后,在终端3输入kill -9 3344,查看终端2的进程反应
      如图3:

      如图4:
    • 注:推篇kill命令的博客。有个很有意思——init进程(硬件狗突然想到了“watchdog”),感兴趣可以自己去看看。
    • 来试试调用kill函数吧,代码如下:
      如图5:
    • 在终端1运行hellosignal,得3245
      如图6:
    • 在终端2运行mykill,并输入3245,查看终端1结果
      如图7:

      如图8:

    2.使用signal()函数来捕捉信号。

    • 创建catchsignal文件,输入代码如下:
      图1:


    • 终端1运行catchsignal,分别输入 CTRL+C 、 CTRL+Z 、 CTRL+ ,观察进程的反应。得到3520。
      如图2:
    • 终端2输入如下kill命令
      如图3:
    • 终端1查看结果
      如图4:

    3.通过举例说明alarm()函数和setitimer()函数的使用。

    • 使用alarm函数,代码如下:
      如图1:

    • alarm_test运行就是打印process will finish!,一秒后停止
    • 运行如下:
      如图2:
    • 使用setitimer()函数,代码如下:
      如图3:

    • 运行如下:
      如图4:
    • alarm()函数和setitimer()函数的区别
      alarm()用来设置信号SIGALRM在经过参数seconds指定的秒数后传送给目前的进程。如果参数seconds为0,则之前设置的闹钟会被取消,并将剩下的时间返回。
      setitimer()支持3种类型的定时器:(1)ITIMER_REAL : 以系统真实的时间来计算,它送出SIGALRM信号。(2)ITIMER_VIRTUAL : -以该进程在用户态下花费的时间来计算,它送出SIGVTALRM信号。(3)ITIMER_PROF : 以该进程在用户态下和内核态下所费的时间来计算,它送出SIGPROF信号。调用成功返回0,否则返回-1

    4.举例说明信号集操作函数的使用。

    • 编写一个打印 sigset_t 的函数,后通常该函数查看,信号集操作函数对信号集操作后的结果。代码如下:
      如图1:


    • 运行结果:
      如图2:

    5.举例说明对阻塞信号与未决信号的理解。

    • 程序思路是先把 SIGINT 、 SIGTSTP 加入到了进程阻塞信号集中去。接下来,每隔一秒打印一次未决信号集,第 10 次的时候,又把 SIGINT 信号从阻塞信号集中删除。代码如下:
      如图1:


    • 运行,分别发送信号 CTRL+C 、 CTRL+Z 、 CTRL+ ,观察,再在终端2输入kill -9 -33922结果:
      如图2:


    6.举例说明sigaction()函数的使用。

    • 代码如下:
      如图1:


    • (1) 当程序运行的时候, Ctrl+C 进入 handler ,然后立即 Ctrl+Z 发现 handler 还未执行完就被 SIGTSTP 打断。(2) 当程序运行的时候, Ctrl+Z 进入 handler ,然后立即 Ctrl+C 发现并不会被 SIGINT 打断,这是因 为该 handler 注册的时候被设置了 SA_MASK = SIGINT 。最后 handler 结束的时候打印了未决信号集,发现里头有 SIGINT 。所以 handler 结束后,又去继续对 SIGINT 进行处理。运行结果:
      如图2:
  • 相关阅读:
    CF 842A
    Codeforces 842B
    CodeForces
    CodeForces 359A Table
    Find them, Catch them POJ
    剪花布条 HDU
    关于map的学习笔记
    ASP.NET MVC 中将数据从View传递到控制器中的三种方法(表单数据绑定)
    SQL Delta实用案例介绍 (对应软件)
    SQL Select count(*)和Count(1)的区别和执行方式及SQL性能优化
  • 原文地址:https://www.cnblogs.com/anhui-first-handsome/p/12943075.html
Copyright © 2011-2022 走看看