vfork

参考资料

函数vfork { 链接 }

函数vfork

» fork( ): 父子进程的执行次序不确定。

   vfork( ):保证子进程先运行,在它调用 exec(进程替换) 或 exit(退出进程)之后父进程才可能被调度运行。


» fork( ): 子进程拷贝父进程的地址空间,子进程是父进程的一个复制品。

   vfork( ):子进程共享父进程的地址空间(准确来说,在调用 exec(进程替换) 或 exit(退出进程) 之前与父进程数据是共享的)

验证:通过 vfork() 创建的子进程会执行完后,才到父进程执行:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
	pid_t pid;
	
	pid = vfork();	// 创建进程
	if(pid < 0){ // 出错
		perror("vfork");
	}
	
	if(0 == pid){ // 子进程
		sleep(3); // 延时 3 秒
		printf("i am son\n");
		
		_exit(0); // 退出子进程,必须
	}else if(pid > 0){ // 父进程
		
		printf("i am father\n");
	}
	
	return 0;
}

上面的代码,已经让子进程延时 3 s,结果还是子进程运行结束后,父进程才执行,运行结果如下: 

猜你喜欢

转载自www.cnblogs.com/sunbines/p/9224676.html