2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 进程创建函数fork

进程创建函数fork

时间:2021-10-16 13:31:19

相关推荐

进程创建函数fork

fork

fork()

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

进程是树形结构,子进程可随时通过getppid()获取父进程;而父进程只能在创建时获取子进程号。

返回值小于0,则表示创建失败。一般是由于用户ID的进程总数超过了系统限制。

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

这里存储空间多采用写时复制的方式Copy-On-Write。一开始共享存储空间(此时有写保护,进程拥有只读权限),直到子进程试图修改某个区域时,进行复制。复制单位一般为页大小。

常见用法:

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

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

例子:

#include<unistd.h>#include<stdio.h>#include<sys/types.h>intmain(){intmoney=100;pid_tkid=fork();if(kid<0){printf("wrong!");}elseif(kid==0){printf("I'mkid!pid=[%d]\n",getpid());money+=10;}else{printf("I'mparent!pid=[%d]\n",getpid());money-=10;}printf("pid=[%d],ppid=[%d],money=[%d]\n",getpid(),getppid(),money);getchar();return0;}

运行结果:

I'mparent!pid=[3282]pid=[3282],ppid=[3139],money=[90]I'mkid!pid=[3283]pid=[3283],ppid=[3282],money=[110]

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。