分类: 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重启阻塞函数。