1.主要程序结构
(1)事件主控方式
若是应用程序属于事务处理方式,则在主函数中设计为监控事件发生, 当事件发生时,可以生成一个新的进程来处理该事务,事务处理完成后就可以让子进程退出系统.这种处理方式一般不要消息传递。
(2)信息协调方式
若是应用程序需要由多个进程协调处理完成,则可以生成这些进程,通过消息在进程间的传递,使各个进程能相互协调,共同完成事务。这种处理方式一般是用fork()生成几个进程后,用exec()调用其它程序文件,使得不同的程序同时在系统内运行。然后通过IPC机制传送消息,使各个程序能协调运行。
2.选择主体分叉点
(1)事件初始产生
对应于事件主控方式的程序结构.关键点在于以何种方式选择事件的初始发生点,r序给出的建链信息.主控程序在收到该消息后就认为是一个事件开始,则可以产生一个子进程处理后面的事务:接收交易信息,事务处理,发送返回交易信息,关闭链接等,完成后将子进程退出系统。
(2)主程序自主产生
对应于信息协调方式的程序结构,主控程序只负责生成几个子进程,各个子进程分别调用exec()将不同的执行文件调入内存运行,主控程序在生成所有的子进程后即可退出系统,将子进程留在内存中运行。
3.进程间关系处理
(1)父子进程关系
进程组处理
进程组的概念是这样的,当系统启动时,第一个进程是init,其进程组号等于进程号,由它产生的所有子进程的进程组号也相同,子进程的子进程也继承该进程组号,这样,由init所生成的所有子进程都属于同一个进程组.但是,同一个进程组的父子进程可能在信号上有相互通讯,若父进程先于子进程退出系统,则子进程会成为一个孤儿进程,可能变成僵死进程.从而使该子进程在其不"愿意"的情况下退出运行.为解决这个问题,子进程可以自己组成一个新的进程组,即调用setpgrp()与原进程组脱离关系,产生一个新的进程组,进程组号与它的进程号相同.这样,父进程退出运行后就不会影响子进程的当前运行.
子进程信号处理
但是,单做上述处理还不能解决另一个困难,即子进程在退出运行时,找不到其父进程(父进程已退出,子进程的父进程号改为1).发送子进程退出信号后没有父进程做出响应处理,该子进程就不可能完全退出运行,可能进入僵死状态.所以父进程在产生子进程前最好屏蔽子进程返回信号的处理,生成子进程,在父进程退出运行后,子进程返回则其进程返回信号的处理会由系统给出缺省处理,子进程就可以正常退出.
(2)兄弟进程关系
交换进程号
对于信息协调方式的程序来说,各兄弟进程间十分需要相互了解进程号,以便于信号处理机制.比较合理的方法是父进程生成一个共享内存的空间,每个子进程都在启动时在共享内存中设置自己的进程号.这样,当一个子进程要向另一个子进程发送信号或是因为其他原因需要知道另一个子进程号时,就可以在共享内存中访问得到所需要的进程号.