Unix-Linux 编程实践教程 第七章 小结

  • 设置发送信号的计时器---alarm()alarm()设置当前进程的计时器到seconds秒后收到由内核发来的SIGALARM信号
  • pause()挂起调用进程知道一个信号到达,如果调用进程被整个信号终止,pause()则不会返回
  • 三种计时器:
    1. ITIMER_REAL---真实计时器,记录进程的所有时间,包括用户态时间、内核态时间以及睡眠时间。信号量为SIGALARM。
    2. ITIMER_VIRTUAL---用户态时间计时器,仅仅记录进程的用户态时间。信号量为SIGVTALARM。
    3. ITIMER_PROF---实用计时器,记录进程的用户态时间+内核态时间。信号量为SIGPROF。
  • 设置or获取间隔计时器---getitimer(),setitimer()
  • 复杂的信号处理设置函数---sigaction()
    struct sigaction {
                   void     (*sa_handler)(int); //SIG_DEF,SIG_IGN,或者函数
                   void     (*sa_sigaction)(int, siginfo_t *, void *); //新的信号处理函数
                   sigset_t   sa_mask;           //当信号处理时需要被阻塞的其他信号集
                   int        sa_flags;          //信号处理机制
                   void     (*sa_restorer)(void);
               };
    

  • 阻塞信号有个两个地点,一个是信号处理者一级阻塞信号(用sigaction()),第二个是在进程一级阻塞信号(用sigprocmask())。sigprocmask()实际就是修改当前信号挡板的设置。

  • sigset_t是信号集类型,基本函数如下:

  • 向指定进程发送指定信号---kill()

  • 异步IO:Unix有2个异步输入系统。一种是当输入就绪时发送信号,另一种是系统当输入被读入时发送信号。UCB中通过设置文件描述块的O_ASYNC位来实现第一种,第二种是POSIX标准,调用aio_read。

猜你喜欢

转载自my.oschina.net/u/3281747/blog/2885307