信号

来源:互联网 发布:2017淘宝热卖排行榜 编辑:程序博客网 时间:2024/04/30 11:49

信号:
信号是软件中断;是一种异步通信方式,能直接进行用户进程和内核的交互。
1、信号的产生:
从终端键输入;硬件异常;软件异常;kill函数;kill命令。
2、对信号的基本操作:
2-1、int kill (pid_t pid ,int signum);给进程pid传送信号。
pid的取值:pid>0:将信号传送给进程ID为pid的进程。
pid=0:将进程传送给当前组的所有进程;
pid=-1:将信号传给所有进程;
pid<-1:将进程传给指定组的所有进程,该组的ID是pid的绝对值。
2-2、alarm(second)
在second秒后发送一个SIGALARM信号,种植alarm()函数。
2-3、rasie(signum)
给自己发送一个信号。
2-4、pause()
挂起进程;等待信号的到来。
2-5、abort()
给自己发送一个SIGABORT信号,即使该信号被加入到了阻塞集也会立即执行。
2-6、signal(signum,handler)
handler的取值:SIG_IGN:忽略该信号;SIG_DFL:执行默认动作;函数名:执行该函数。
2-7、信号集的相关操作:
sigemptyset,sigfillset,sigaddset,sigdelset,sigismumber
前两个其参数为(sigset_t *set)指的是信号集。
后三个的参数为(sigset_t *set,int signum)对signum在set中加入或者删除或者查找。
2-8、sigprocmask(int how,sigset_t *set,sigset_t *oldset)
how:取值:SIG_BLOCK:向阻塞集中添加set信号集;
SIG__UNBLOCK:在阻塞集中删除set信号集;
SIG_SETMASK:把set信号集设置为阻塞集。
3、signal()函数只对前32个不可靠、非实时信号的处理。
可靠信号就是实时信号,非可靠信号就是非实时信号;
4、sigqueue(pid_t pid,int sig,const union signal value)往指定进程中发送信号
pid:进程号;sig:信号的编号;value:通过信号传递的参数。
union sigval{
 int sival_int;
 void *sival_ptr;
}
4-1、sigaction(int signum,struct sigaction *act,struct sigaction *oldact);
检查或修改指定信号的设置;
struct sigaction{
 void (*sa_handler)(int signum);
 void (*sa_sigaction)(int signum,siginfo_t *info,void *context);
 sigset_t sa_mask;//信号处理函数执行期间要阻塞的信号集;
 int sa_flags;//不指定SA_SIGINFO会调用第一个函数,如果指定会调用第二个函数。
}