nbsp; 子进程退出信号后没有父进程做出响应处理,该子进程就不可能完 全退出运行,可能进入僵死状态.所以父进程在产生子进程前最好屏
蔽子进程返回信号的处理,生成子进程,在父进程退出运行后,子进
程返回则其进程返回信号的处理会由系统给出缺省处理,子进程就
可以正常退出.
(2)兄弟进程关系
. 交换进程号
对于信息协调方式的程序来说,各兄弟进程间十分需要相互了解进
程号,以便于信号处理机制.比较合理的方法是父进程生成一个共享
内存的空间,每个子进程都在启动时在共享内存中设置自己的进程
号.这样,当一个子进程要向另一个子进程发送信号或是因为其他原
因需要知道另一个子进程号时,就可以在共享内存中访问得到所需
要的进程号.
4.进程间通讯处理
(1)共享内存需要锁机制
由于共享内存在设计时没有处理锁机制,故当有多个进程在访问共享
内存时就会产生问题.如:一个进程修改一个共享内存单元,另一个进程在
读该共享内存单元时可能有第三个进程立即修改该单元,从而会影响程序
的正确性.同时还有分时系统对各进程是分时间片处理的,可能会引起不
同的正确性问题.按操作系统的运作方式,则有读锁和写锁来保证数据的
一致性.所以没有锁机制的共享内存,必须和信号量一起使用,才能保证共
享内存的正确操作.
(2)消息队列需要关键值
消息队列的操作在进程取得消息队列的访问权限后就必须通过关键
值来读消息队列中的相同关键值的消息,写消息时带入消息关键值.这样
可以通过不同的关键值区分不同的交易,使得在同一个消息队列可以供多
种消息同时使用而不冲突.若读消息队列使用关键值0则读取消息队列中
第一个消息,不论其关键值如何.
(3)信号需要信号处理函数设置和再设置
在用户进程需要对某个中断做自己定义的处理时,可以自己定义中断
处理函数,并设置中断处理函数与该中断相关联.这样,用户进程在收到该
中断后,即调用用户定义的函数,处理完成后用户进程从被中断处继续运
行(若用户定义的中断函数没有长跳函数或退出运行等会改变运行指令地
址的系统调用).在中断信号被处理后,该中断的处理函数会恢复成上次缺
省处理函数而不是保持用户定义函数,故在用户定义的中断处理函数中一
般都再定义该中断和函数自己的关联.
(4)IPC的权限设置
在消息队列,共享内存和信号量的访问时有用户访问权限设置,类同
于文件的访问权限的设置如(777表示rwxrwxrwx),用命令ipcs即可看到在
系统中生成的消息队列,共享内存和信号量的访问权限.其意义也类似于
文件访问权限.只是执行位无效.
在有名管道和文件方式共享内存中以系统文件的方式定义了用户的
访问权限.用命令ls -l可以看到它们以系统文件方式存在并具有访问权
限值,并可以看到有名管道的文件类型为p,文件方式共享内存的文件类型
为s.
(5)信号中断对系统调用一级有效
系统在设计系统调用时就考虑了中断处理问题.当进程运行到一个系
统调用时发生了中断,则进程进入该中断处理,处理完成后,进程会跳过该
系统调用而进入下一条程序指令.
应该注意的是中断发生在系统调用一级而不是子程序或函数一级.比
如一个程序在一个子程序被调用前设置了超时中断,并在子程序中收到超
时中断,系统在处理完超时中断后接着处理该子程序被中断的系统调用之
后的指令,而不是从调用该子程序名指令的后一条指令继续处理.
(6)各种IPC方式的特点
. 消息队列:
通过消息队列key值定义和生成消息队列.
任何进程只要有访问权限并知道key即可访问消息队列.
消息队列为内存块方式数据段.
消息队列中的消息元素长度可为系统参数限制内的任何长度.
消息元素由消息类型分类,其访问方式为按类型访问.
在一次读写操作前都必须取得消息队列标识符,即访问权.访问后即
&n