当一个进程结束时,产生一个终止状态字,然后系统和新发一个SIGCHILD信号通知父进程。因为子进程结束是异步与父进程的,故父进程结束之前,要同步等待子进程终止。这是系统通过调用wait或waitpid来实现的。
#include
#include
#include
#include
#include
int main() { int child; if((child = fork()) == 0) { printf("child PID is %d\n",getpid()); exit(0); } printf("child PID to return to parent is %d\n",child); wait(0); return 0; }
父子进程之间的同步之例
#include
#include
#include
#include
#include
int main() { int pid1; if(pid1 = fork()) { if(fork()) { printf("parents context\n"); printf("parent is waitting the child1 terminate\n"); wait(0); printf("parent is waitting the child2 terminate\n") wait(0); printf("parent terminate\n"); exit(0); } else printf("child2 context\n"); sleep(5); printf("child2 terminate\n"); exit(0); } else { if(pid1 == 0) { printf("child context\n"); sleep(10); printf("child terminate\n"); exit(0); } } return 0; }
上述程序是父进程首先创建一个子进程,若成功,再创建另一个子进程,之后三个进程并发进行。究竟谁先运行,是随机的,下图是其中一个结果
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/225665.html原文链接:https://javaforall.net
