APUE2e之Exercise 8.2

来源:互联网 发布:mac文件夹消失 编辑:程序博客网 时间:2024/06/10 00:48

vfork v.s. fork


/* * exercise8-2.c * *  Created on: Nov 10, 2011 *      Author: zhuhuang */ #include <apueerr.h> int glob = 6; int callvfork(void){int var=88;pid_t pid; //compare the running results using vfork and fork /* Using forkin main first:4656before callvforkin callvfork parent:4656glob: 6, var: 88in main second:4656after callvforkbefore anothercallin anothercall:4656after anothercallin callvfork child:4661in main second:4661after callvforkbefore anothercallin anothercall:4661after anothercall*/ /* Using vforkin main first:4608before callvforkin callvfork child:4613in main second:4613after callvforkbefore anothercallin anothercall:4613after anothercallin callvfork parent:4608glob: 7, var: 2077184*/ if((pid = fork()) < 0){err_sys("vfork error");}else if(pid == 0){//the increasing of the variables done by the child changes the values in the parentglob++;printf("in callvfork child:%dn", getpid());return 0;} printf("in callvfork parent:%dn", getpid());printf("glob: %d, var: %dn", glob, var);  //var is} int anothercall(void){int i;int buf[100]; for(i=0;i<100;i++)buf[i]=1; printf("in anothercall:%dn", getpid());} int main(void){printf("in main first:%dn", getpid()); printf("before callvforkn");callvfork(); //Using vfork: child process continues to execute the following code. But parent process doesn't.//Using fork: both child and parent processes execute the following code.printf("in main second:%dn", getpid()); printf("after callvforkn");printf("before anothercalln");anothercall();printf("after anothercalln"); exit(0);}