码迷,mamicode.com
首页 > 系统相关 > 详细

进程创建函数fork

时间:2018-07-24 00:10:32      阅读:247      评论:0      收藏:0      [点我收藏+]

标签:用法   结构   lse   操作   write   子进程   clu   family   pes   

fork

fork()


调用一次返回两次:父进程返回子进程pid,子进程返回0。

进程是树形结构,子进程可随时通过getppid()获取父进程;

而父进程只能在创建时获取子进程号。


子进程使用父进程堆栈及数据空间副本等存储空间。代码正文段及文件共享,例如文件偏移量。

存储空间多采用写时复制的方式Copy-On-Write。一开始共享存储空间,直到子进程试图修改某个区域时,进行复制。复制单位一般为页大小。


常见用法:

1、父进程希望子进程复制自己,后处理不同的代码段。如网络请求,父进程等待请求,后续操作交给子进程;

2、父进程需要执行另一个不同的程序。一般交给子进程,fork()后exec()。如shell操作。



例子:


#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>


int main() {
	int money = 100;
	
	pid_t kid = fork();
	
	if(kid < 0) {
		printf("wrong!");
	}else if (kid == 0) {
		printf("I'm kid! pid=[%d]\n", getpid());
		money += 10;
	}else {
		printf("I'm parent! pid=[%d] \n", getpid());
		money -= 10;
	}
	
	printf("pid=[%d], ppid=[%d], money=[%d] \n", getpid(), getppid(), money);
	
	getchar();
	return 0;
}


运行结果:

I'm parent! pid=[3282] 
pid=[3282], ppid=[3139], money=[90] 
I'm kid! pid=[3283]
pid=[3283], ppid=[3282], money=[110]


进程创建函数fork

标签:用法   结构   lse   操作   write   子进程   clu   family   pes   

原文地址:http://blog.51cto.com/10055124/2149211

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!