Linux软中断通信

进程对信号的响应

(1)忽略信号  

  不采取任何操作、有两个信号不能被忽略:SIGKILL和SIGSTOP。如果忽略,系统管理无法杀死、暂停进程,无法对系统进行管理。

(2)捕获并处理信号   

(3)执行默认操作,通常是终止进程

  信号的默认操作:通过 man 7 signal 查看

系统调用或库函数

1、lockf(fd,function,size)用于进程互斥

2、int  kill(pid,sig)传递中断信号

(1)pid>0时,核心将信号发送给进程pid。
(2)pid=0时,核心将信号发送给与发送进程同组的所有进程。
(3)pid=-1时,核心将信号发送给所有用户标识符真正等于发送进程的有效用户标识号的进程。

3、signal(sig,function)如果接收到中断信号就作相应处理

   其中sig用于指定信号的类型,sig为0则表示没有收到任何信号。常用信号及对应键值见文末。

    function:在该进程中的一个函数地址

   (1)function=1时,进程对sig类信号不予理睬,亦即屏蔽了该类信号;
   (2)function=0时,缺省值,进程在收到sig信号后应终止自己;
   (3)function为非0,非1类整数时,function的值即作为信号处理程序的指针。

4、wait()和waitpid()

wait()会暂时停止进程的执行,直到有信号来到或子进程结束。

 

waitpid和wait的作用本质上相同,但waitpid多出了两个参数pid和options,

pid:pid>0时,只等待进程ID等于pid的子进程,不管子进程

        pid=-1时,等待任何一个子进程退出,没有任何限制,此时waitpid作用同wait

        pid=0时,等待同一个进程组中的任何子进程,如果子进程已经加入了别的进程组,waitpid不会对它做任何理睬。

        pid<-1时,等待一个指定进程组中的任何子进程,这个进程组的ID等于pid的绝对值。

options提供了一些额外的选项来控制waitpid,目前在Linux中只支持WNOHANG和WUNTRACED两个选项,这是两个常数,可以用"|"运算符把它们连接起来使用,比如:ret=waitpid(-1,NULL,WNOHANG | WUNTRACED)。如果我们不想使用它们,也可以把options设为0

5、sleep()和pause()

sleep(n)进程暂停n秒,ctrl+c即SIGINT信号可以使sleep提前结束,继续运行。

pause()会令目前的进程暂停(进入睡眠状态), 直到被信号(signal)所中断.。

6、alarm()

alarm()用来设置信号SIGALRM 在经过参数seconds 指定的秒数后传送给目前的进程. 如果参数seconds 为0, 则之前设置的闹钟会被取消, 并将剩下的时间返回。

返回值:返回之前闹钟的剩余秒数, 如果之前未设闹钟则返回0。

可以设置忽略或者不捕获此信号,如果采用默认方式其动作是终止调用该alarm函数的进程。

 

附:常用信号及对应键值如下:

01 SIGHUP 挂起(hangup)

02 SIGINT 中断,当用户从键盘按^c键或^break键时

03 SIGQUIT 退出,当用户从键盘按quit键时

04 SIGILL 非法指令

05 SIGTRAP 跟踪陷阱(trace trap),启动进程,跟踪代码的执行

06 SIGIOT IOT指令

07 SIGEMT EMT指令

08 SIGFPE 浮点运算溢出

09 SIGKILL 杀死、终止进程 

10 SIGBUS 总线错误

11 SIGSEGV 段违例(segmentation  violation),进程试图去访问其虚地址空间以外的位置

12 SIGSYS 系统调用中参数错,如系统调用号非法

13 SIGPIPE 向某个非读管道中写入数据

14 SIGALRM 闹钟。当某进程希望在某时间后接收信号时发此信号

15 SIGTERM 软件终止(software  termination)

16 SIGUSR1 用户自定义信号1

17 SIGUSR2 用户自定义信号2

18 SIGCLD 某个子进程死

19 SIGPWR 电源故障
其中,SIGUSR1、SIGUSR2为用户自定义信号,接收到信号后的默认处理是进程终止
 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值