linux初学之信号及信号的简介

     一、定义:信号是处理异步事件发生的。

     信号拥有自己的名字,均以SIG开头。它们在头文件中被定义为一个正整数,这些正整数被称为信号编号(signal number)。

     信号数量很多,各有用途。有6个信号被称为作业控制信号,它们是SIGCHLE,SIGCONT,SIGSTOP, SIGTSTP, SIGTTIN 和SIGTTOU。这6个信号有一个共同的特点,即都是用以协调和组织各进程运行的,也就是用于实现所谓作业控制的。在通常情况下,用户不需要对它们进行处理,Shell会自动完成对这些信号的处理工作,作业信号之间互相影响,当进程接收到SIGCONT信号时,被系统悬挂的SIGSTOP,SIGTSTP,SIGTTIN和SIGTTOU信号都将丢失;同样的当进程接收到SIGSTOP,SIGTSTP,SIGTTIN和SIGTTOU信号中的任意一个,被悬挂的SIGCONT信号将丢失。

     二、信号是处理异步事件发生的,在一个进程执行过程中,如果有信号被发送到该进程,则该进程将按预先设定的处理办法进行相应的处理。处理办法可分为下列2种:

  1.             捕捉信号。当某个信号被发送到一个正在执行的进程时,该进程将对该信号注册一个处理函数,以完成所需处理。一旦收到此信号,则通知系统调用相应的信号处理函数,对于每一个信号,系统都有相应的处理函数(通常为终止进程),可以设定进程在信号发生时使用默认的函数处理。

  2.            忽略信号。不希望进程被中止,不对信号进行任何处理。

    三、有两个信号是应用程序无法捕捉和忽略的,他们时SIGKILL 和SIGSTOP。这是为了使系统管理员在任何时候能中断或结束某一特定的进程。

         

                                                                   信号的使用

     信号是一种进程间通信的机制,最大特点是异步,表示进程在任何时刻都有可能接收到信号。信号通常是用于要求进程打断常规的运行而处理来另一些事件。

     一个最常见的用途是在错误发生时通知进程结束。在对信号的说明中已经看到,对于许多错误,如总线错误,浮点运算错误,调用内存错误等错误都有相应的信号通知进程。此外,信号还有许多其他用途。

     如要运行一个大型科学计算程序,在程序运行过程中,希望能随时了解程序运行的状态,可以使用两种不同的方法。一是在程序的循环体中加一些判断,输出之类的语句。这种方法会使代码增加,尽管一次操作的时间不长,但当程序要循环很多次的时候,其耗费也是很可观的。另一种方法是每隔一段时间由系统向该程序发送一个信号,进程捕捉该信号之后调用信号处理函数,展示当前状态参数,而程序本身将继续运行。和前一种方法相比,用信号处理所需时间更短且更高效,这在运行大型程序时是非常有益的。又如在串口通信中所使用的握手信号等都是信号的具体使用。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章