Chinaunix首页 | 论坛 | 博客
  • 博客访问: 263527
  • 博文数量: 42
  • 博客积分: 2415
  • 博客等级: 大尉
  • 技术积分: 590
  • 用 户 组: 普通用户
  • 注册时间: 2006-01-13 14:14
文章分类

全部博文(42)

文章存档

2018年(1)

2017年(8)

2015年(3)

2012年(4)

2011年(11)

2010年(1)

2009年(5)

2008年(9)

我的朋友

分类: 系统运维

2011-03-07 22:21:06

10.9 

...raise是iso c定义的函数,而iso c并不讨论多进程,也就不能定义一个用进程id作参数的函数,因此,调用raise的进程只能给自己发信号.

...允许发送信号的基本规则是发送者的真实或者有效用户id必须等于接收者的真实或者有效用户id,当然,超级用户除外.

...发送信号0并不能确保确定指定进程是否存在,因为:1.进程id是循环使用的,2.这个操作并不是原子操作.

...kill返回之前kill所发送的信号以及其他挂起的信号都会传送给指定的进程,也就是说,kill会引起一系列的信号传送,而不是仅仅只传送指定的信号.

10.10

...每一次alarm调用都会取消并取代前一次alarm的设置,如果存在前一次alarm调用的话.

...一定要在调用alarm之前设置好信号句柄.

...需要使用longjmp来处理超时,虽然会中断别的信号的处理.

10.11

...像sigemptyset这几个函数只是操作一个信号集,这个信号集要起作用需要调用sigprocmask这类函数.

10.12

...使用SIG_SETMASK而不是SIG_UNBLOCK去恢复原来的signal mask的原因在于后者有可能不正确的把本来属于原来mask的信号去掉,因为union操作并不会改变原来就已经打开的位,但是差运算有可能把原来已经打开的位关掉.

...signal mask是被阻塞的信号的集合,实际上,所有的mask都是被阻塞或者被禁止的集合.

10.14

...sa_mask保存的是一组额外的需要block的信号,调用信号句柄时这组信号与原有的mask中的信号一起组成了新的mask,而当信号句柄返回时又会恢复原来的mask,也就是这组额外的mask被取消了.

...当句柄被调用时,操作系统会把引发句柄调用的信号加入到mask中,这样句柄在处理时就可以block掉同样的信号.在block期间如果多次产生了同一信号,那么在unblock之后只会处理一次.

...信号句柄装载之后除非显示的取消,不然将一直存在于进程的整个生存期内.

...实际上目前版本的linux缺省的不会再产生僵尸进程,因为SIGCHLD的缺省处理是忽略,而标准已经规定当忽略SIGCHLD时只是简单的把子进程剩余信息丢弃.

...当SIGALRM发生时,系统调用不应该自动重启,以便于实现对I/O的超时控制.

 10.15

...为什么要用sigsetjmp和siglongjmp?要记得当捕获到一个信号从而进入信号句柄的时候,这个信号会自动加入进程的信号mask,当从信号句柄中使用longjmp返回主函数的时候,进程的信号mask将如何处理?是否会自动恢复?标准并未对此作出限定,而是提供了两个新的函数sigsetjmp和siglongjmp.

...信号可能会随时出现,如果在信号句柄中调用了siglongjmp,而此时sigsetjmp尚未初始化sigjmp_buf,那么结果将不可预料,所以必须对此进行保护,也就是要保证只有在sigjmp_buf确定初始化完毕,换句话说就是sigsetjmp返回之后,信号句柄中才允许调用siglongjmp.

10.16

...处理任何一件可能随时发生的事件时必须考虑时间窗口的问题.如果在窗口期间发生了这样的事件,那么就有可能出现不是预期的结果,这也是原子操作出现的原因.

...如果在sigsuspend期间我们意图调用其他系统函数,那么除了使用多线程别无他法.

10.19

...sleep除了到时返回外,还会被信号中断随信号句柄返回后返回,这时候的返回值是剩余时间.

...sleep可以使用alarm实现,这点并非强制性的.但是如果是由alarm实现的,那么使用是就必须考虑这两个函数之间的互动性.

阅读(937) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:undefined symbol,静态库及c/c++头文件

给主人留下些什么吧!~~