码迷,mamicode.com
首页 > 其他好文 > 详细

1.信号处理之:kill(),alarm(),pause()函数

时间:2014-09-21 03:41:10      阅读:353      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   os   ar   for   2014   



1查看信号的方式:man 7 signal,通过这个命令可以查看到所有信息。

2查看信号kill -l

bubuko.com,布布扣

注意,后面的32个信号表示的实时信号。

 

会发现一个规律,前32种信号会有各种不同的名称,后32种会以“SIGRTMIN”或者“SIGRTMAX”开头,前者是从unix继承下来的信号,称为不可靠信号(也称为非实时信号),后者为了解决不可靠信号的问题进行了更改和扩充的信号形成了可靠信号(也称为实时信号)

如果想要了解可靠与不可靠信号,需要了解信号的生命周期:

一个完整的信号周期可以分为三个重要阶段,三个重要阶段有四个重要事件刻画的:信号产生,信号在进程中注册,信号在进程中注销,执行信号处理函数

bubuko.com,布布扣

相邻的两个事件的时间间隔构成了生命周期的一个阶段,这里的信号处理有多种方式,一般由内核完成,也可以由用户进程完成

3.man 7 signal

 

Signal dispositions

       Each signal has a current disposition,which determines how the process

       behaves when it is delivered the signal.

 

       The entries  in  the "Action"  column of thetables below specify the

       default disposition for each signal, asfollows:

       Term  Default action is to terminate the process.  表示终止当前线程

       Ign   Default action is to ignore the signal. 表示忽略该信号

       Core  Default action is to terminate the process and  dump core  (see

              core(5)). 表示终止当前进程并且Core Dump(Core Dump用于gdb调试)

       Stop  Default action is to stop the process. 表示停止当前进程

       Cont  Default  action  is to  continue the process if it iscurrently

              stopped. 表示继续执行先前停止的进程。

信号产生种类:

Ctrl+C   SIGINT

Ctrl+z   SIGTSTP

Ctrl+\   SIGQUIT

4.硬件异常

*0操作

*访问非法内存

int kill(pid_tpid,int sig)

   pid > 0

       sig发送给IDpid的进程

   pid < 0

       sig发送给组ID|pid|的进程,并且发送进程具有向其发送信号的权限

   pid == -1

       sig发送给发送进程有权限向他们发送信号的系统上的所有进程为0时,用于检索,特定pid进程是否存在,如不存在,返回-1

bubuko.com,布布扣

bubuko.com,布布扣

kill函数的语法格式:

bubuko.com,布布扣

raise()函数(自己向自己发送信号)语法要点:

bubuko.com,布布扣

下面的例子使子进程不在父进程调用kill之前不退出,然后父进程调用kill使子进程退出:

bubuko.com,布布扣

运行结果:

bubuko.com,布布扣

当去掉24行时,运行的结果是:

bubuko.com,布布扣

5.alarm()pause()

函数说明

  alarm()也称为闹钟函数,它可以在进程中设置一个定时器,当定时器指定的时间到时,它就向进程发送SIGALARM信号。要注意的是,一个进程只能有一个闹钟时间,如果在调用alarm()之前已设置过闹钟时间,则任何以前的闹钟时间都被新值所代替。

 pause()函数用于将调用进程挂起直至捕捉到信号为止。这个函数很常用,通常可以用于判断信号是否已到。

函数格式

bubuko.com,布布扣

bubuko.com,布布扣

本实验上是完成一个简单的sleep()函数的功能,程序如下图

bubuko.com,布布扣

运行结果:

bubuko.com,布布扣

注释第9

bubuko.com,布布扣

运行结果:

bubuko.com,布布扣

上面一闪而得出结果。

分析:程序定时时,执行到第9pause()时,进程会被挂起,当计时到,发送信号SIGALARM,这时pause()捕捉到信号,进程直接被终止。

                                                                                                                                                       

再如通过alarm实现打印计数:

bubuko.com,布布扣


运行结果:

bubuko.com,布布扣

bubuko.com,布布扣


1.信号处理之:kill(),alarm(),pause()函数

标签:style   blog   http   color   io   os   ar   for   2014   

原文地址:http://blog.csdn.net/tototuzuoquan/article/details/39440779

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!