信号

参考

http://kenby.iteye.com/blog/1173862

信号是UNIX和LINUX系统响应某些条件而产生的一个事件,接受到该信号的进程会采取相应的行动。

信号由某些错误条件而生成的,如内存段冲突,浮点处理器错误和非法指令,由shell和终端处理器生成来引起中断,它们还可以作为在进程传递消息或修改行为的方式,明确的由一个进程传递给另一个进程。信号可以被生成,捕获,响应或忽略(对于某些信号)。

信号的名称在头文件signal.h以SIG开始。

ctr+c会向前台程序发送SIGINT信号,默认是终止程序。

通常给不是前台进程发送信号的方法

kill/killall -HUP pid (killall给所有进程发送信号)

处理信号函数

#include<signal.h>

void (*signal(int sig,void(* func)(int)))(int)//返回一个 void * (*func)(int) signal(int sig, void(*func)(int))

指定某个信号的处理函数,函数的声明 void (*func)(int), signal的第一个参数指定信号,第二个参数指定处理函数,可以使用SIG_IGN(忽略),SIG_DFL(默认)。当程序设置一个自己定义的信号处理函数进行捕获处理的时候,每次都换调用,代替系统原有的处理。signal捕获的信号是不可捕获的或不可忽略的时候将调用失败,errno将被设置EINVAL。

发送信号

进程可以通过调用kill给包括自己在内的进程发送信号,当调用失败的时候一般是由于权限的问题。

#include<sys/types.h>

#include<signal.h>

int kill(pid_t pid,int sig);

kill向指定的pid发送信号sig,当成功的时候返回0,失败返回负的,errno被设置为EINVAL代表信号无效,EPERM代表权限不够,ESRCH代表目标进程不存在。

#include<unistd.h>

unsiganed int alarm(unsigned int seconds);

alarm在seconds秒后发送信号SIGALRM,由于调度和处理的时间的延迟则会迟发,seconds设置为0则取消原先所有的alarm,在alarm的等待时间中重新调用alarm则重新开始计时,每一个进程只能有一个闹钟时间,返回值返回的是以前剩余的秒数,失败返回-1.

#include<unistd.h>

int pause(void)

进程被挂起等待信号到来。


健壮的信号接口

#include<signal.h>

int sigaction(int sig,const struct sigaction *act, struct sigaction *oact)

sigaction包括以下成员

void (*)(int) sa_handler /*function, SIG_DFL,SIG_IGN

sigset_t sa_mask /*signals to block in sa_handler

int sa_flags /*signal action modifiers

sa_mask成员指定一个信号集,在调用sa_handler所指向的信号函数之前,该信号集将被加入到进程的信号屏蔽字中,这是一组将被阻塞且不会传递给进程的信号。设置信号屏蔽字可以防止看到信号在它的处理函数还未运行结束时就接收到的情况。

sigaction函数设置的信号处理函数在默认情况下不被重置的,如果进行重置,就必须在sa_falgs成员中包含值SA_RESETAND.



1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值