Chinaunix首页 | 论坛 | 博客
  • 博客访问: 173337
  • 博文数量: 45
  • 博客积分: 1228
  • 博客等级: 中尉
  • 技术积分: 450
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-26 11:37
文章分类
文章存档

2013年(4)

2012年(3)

2011年(20)

2010年(18)

我的朋友

分类: LINUX

2011-02-16 10:26:41

进程间通信:信号

1.        使用pipe进行进程间通信注意:当pipe中有数据时:read读取数据。pipe中无数据时:产看写端是否关闭,如果全部关闭,产生文件结束标记(ctrl + D),read返回0,如果没关,read阻塞。在write时,读端关闭write受到sigpipe信号进程异常终止,读端没关:查看pipe是否写满:如果写满:write阻塞,如果不满:则实际写入。

2.        pipe 弱点:1仅限父子和兄弟之间的通信。2双向半双工的通信。

3.        信号:是一种使用软件手段模拟硬件中断机制的进程间通信方式,由内核发送。kill命令kill -sigid signame pid;kill -9 5432 或者kill -sigkill 5432; kill -l 显示killno。

4.        信号的特点:1 编号 2名称 3代表一种事件 4 要有一个处理方式。sigbus 总线错误,内存映射错误。sigkill,sigstop不能被忽略,

5.        信号处理方式:默认, 忽略,捕捉。[ + d 查看宏定义。sigalrm,默认动作是终止进程, 定时器的计时与进程状态无关。一个进程只有一个定时器。

6.        setitimer 微妙级的定时器。定时方式。阻塞分为:可中断和不可中断。运行:用户空间运行,内核空间运行(ITIMER_REAL)。就绪态。其设置的定时器是可以反复执行的。

7.        位向量:mode_t 和 文件打开标志,sigset_t

8.        系统调用:是内核的一部分,用于操作外部资源或者访问内核数据结构的函数。信号在被屏蔽期间不做处理,在解除屏蔽以后立刻处理,如果在屏蔽过程中多次接受到某信号则,结束时只处理一次。

9.        在执行A信号处理函数时受到A信号会自动屏蔽。A处理函数执行完后屏蔽自动解除。9号信号SIGKILL SIGBUS SIGCHLD SIGALRM SIGFPE SIGPIPE SIGSEGV

今天内容:信号

1.        系统调用:低速系统调用(有可能造成永远阻塞的系统调用)它可以被信号中断,当其处于阻塞时,受到信号(忽略:继续阻塞。默认:杀死。捕捉:先执行信号处理函数,然后立即返回-1,errno 被设置为EINTR),其他系统调用不可以被信号中断。

2.        设计库函数时对于全局作用的变量要恢复现场。内核中关于内存管理和文件管理部分。

3.        不可靠信号:当系统负载严重的情况下,cpu轮转时间过长,信号成为一种不可靠的通信方式。                                                                                                                                                                                                                                                                                                                        

4.        代码重点:pause实现mysleep,sigsuspend实现mysleep,当阻塞函数被信号中断时,用goto语句或者设置sa_flags = SA_RESTART重启阻塞函数。

 signal.rar   

阅读(1203) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~