在父进程调用fork创建了子进程后,父进程和子进程可能都有一些事情要做。例如,父进程需用子进程ID更新日志,子进程可能需要为父进程创建一个文件。fork后哪一个进程会先被调度执行是未知的,因此便会产生竞争条件。
#include"apue.h"
TELL_WAIT();//set things up for TELL_XXX and WAIT_XXX
if((pid=fork())<0)
{
err_sys("fork error!");
}
else if(pid==0)
{
/*child process does whatever is necessary*/
TELL_PARENT(getppid());//tell parent we are done
WAIT_PARENT();//wait for parent
/*and the child continues on its way*/
exit(0);
}
/*parent does whatever is necessary*/
TELL_CHILD(pid);//tell child we are done
WAIT_CHILD();//wait for child;
/*and the parent continues on its way*/
exit(0);
图中,fork之后花开两朵,两个进程各自做自己的事情,但是两个进程完成若想完成后面的工作,则对另一进程有所依赖。例如只有当子进程创建了文件之后父进程才能继续后面的工作,或者是只有当父进程更新完日志之后子进程才能进行后面的工作,为达到这个目的,需要两个进程之间相互协调,即进程间通信(IPC)。IPC的具体实现方式有多种&