Linux 信号随笔

POSIX标准定义了数据类型sigset_t来表示信号集。

  1.  sigprocmask函数

    每一个进程都有一个信号屏蔽码,它规定了当前阻塞而不能递送给该进程的信号集。函数sigprocmask可以检测或者更改进程的信号屏蔽码。

int sigprocmask(int how, const sigset_t * set, sigset_t * oldset);

如果oldset为非空指针,则该进程之前的信号屏蔽码通过oldset返回。

如果set为非空指针,则该函数将根据how来修改信号当前的屏蔽码,how的取值如下:

(1)SIG_BLOCK:将进程新的信号屏蔽码设置成为当前信号屏蔽码和set指向信号集的并集。

(2)SIG_UNBLOC:将进程新的信号屏蔽码设置成为当前信号屏蔽码中,删除set所指向的信号集,即set指针包含着我们希望解除阻塞的信号。即使对当前信号屏蔽码中不存在的信号使用SIG_UNBLOCK也是合法的。

(3)SIG_SETMASK:将进程新的信号屏蔽码设置成为set所指向的。

 

  2.   sigpending函数

int sigpengding(sigset_t *set);用来获取当前未决的信号集。

3.  sigsuspend函数

int sigsuspend(const sigset_t * mask);将进程屏蔽码设置成为mask,然后与pause函数一样,等待信号的发生并执行完信号处理函数。信号处理函数执行完后再把进程的信号屏蔽码设置为原来的屏蔽字,然后sigsuspend函数才返回。sigsuspeng保证改变进程的屏蔽码和将进程挂起等待信号的操作是原子操作。

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(linux)