现在的位置: 首页 > 综合 > 正文

读书笔记-第九章 进程关系 第十章 信号

2013年10月18日 ⁄ 综合 ⁄ 共 1495字 ⁄ 字号 评论关闭

第十章信号

1..信号是异步事件的经典实例.

2..信号的产生

    a..进程自身-->abort

    b..其他进程

    c..内核

2..内核对信号的处理

   a..忽略信号         SIGKILL 和 SIGSTOP不能忽略--->SIGIGN

   b..捕捉信号          定义信号处理函数

   c..执行默认动作  --->SIGDFL

3..signal函数

    typedef void Sigfunc(int);

    Sigfunc *signal(int, SIgfunc*);

4..信号的状态

    a.程序启动时--->系统默认  exec函数将所有信号设置为默认动作

    b..fork后的子进程,集成父进程的处理方式.

5..早期版本 信号不可靠的原因-->捕捉信号后,设为默认值 在设为默认值后,再次添加信号处理之前,有一个窗口期,

6..中断的系统调用

    为了不出里 被中断的系统调用  引入系统调用的自动重启动

7..可重入函数

    信号到来时,进程被打断.执行完信号处理程序后返回,继续.

    例如:malloc就是不可重入的.

    /***

    因此,single UNIX speification说明了保证可重入的函数列表,是可供信号处理函数调用的.

    但是,即使位于此表中,由于每个线程只有一个errno变量,因此也可改变其值

 ---->因此信号处理程序中应保存和恢复errno

 **/

8..kill( getpid(), signo ); == raise(signo)

9..alarm 计时器,定时产生alarm信号.

 每个进程只能有一个闹钟时钟.需要先定义处理函数,再alarm

    例如:

     signal(SIGALRM, sig_alarm);

     alarm(1);

10..pause  使得进程挂起, int pause(void)

      只有执行一个信号处理程序并返回时,pause才返回.

11..信号集--->需要一个能表示多个信号的数据类型.

12..五个处理信号集合的函数

      #include <signal.h>

      int sigemptyset(sigset_t *set)

      int sigfillset

      int sigaddset

      int sigdelset

      int sigismember

12..sigprocmask  测试屏蔽字/返回当前屏蔽字

       SIG_BLOCK             并集

       SIG_UNBLOCK       交集

       SIGSETMASK          被set代替

13..sigpending 返回信号集合

       sigpending()

14..sigaction()

       功能:检查或修改与指定信号相关联的处理动作.

15..当调用一个信号处理程序时, 被捕捉的信号加入 当前进程的屏蔽字.

16..sigsetjmp 和siglongjmp 可以选择是否回复屏蔽字.

17..sigsuspend..在一个原子操作中西先恢复屏蔽字,然后使进程休眠.

      保护临界区不被信号中断

18..abort() 使异常程序终止

19..sleep  捕捉到一个信号,并从信号处理程序返回.

第九章

1..每个进程 -- 进程ID 进程组ID

     getpgrp();    == getpgid(0)

2..每个进程组都有一个组长进程

3..setpgid 加入现有组,或者创建新组

4..进程只能为他自己或者他的子进程设置进程阻ID

5..会话

    一个或者多个进程组的集合

    setsid(void) 建立一个新会话

【上篇】
【下篇】

抱歉!评论已关闭.