父进程 子进程 可以并发执行吗?
父进程和子进程基本上是完全一样的,就象你运行了两份这个程序,而这两个程序都同时执行到fork这位置。区别就是fork对父进程返回的pid 是0。其它东西都是一样的。就是对父进程当前状态做了一个镜象
操作系统的父进程和子进程问题!!!!
运维
Linux系统进程控制
行者111111111111111
原创
关注
0点赞·3人阅读
1、进程创建
shell命令行启动程序指令皆是创建了进程,我们通常通过调用fork()函数创建子进程。
1.1、fork()函数用法简介
调用fork后,操作系统内核将:
分配新的内存块和内核数据结构给子进程
将父进程部分数据结构内容拷贝至子进程
添加子进程到系统进程列表当中
fork返回,开始调度器调度
1.2、fork函数返回值
子进程返回0,父进程返回的是子进程的pid
原因:fork之后进入内核,申请内存构建子进程PCB、虚拟内存、页表,将子进程设置R状态,放入调度队列,由于创建子进程之后父子进程共享代码,所以父子进程都会有return返回值。返回值返回给变量本质发生了写时拷贝,改变了子进程对应页表的指向,数据映射到了其他区域
1.3、写时拷贝
由于进程要独立,代码不可修改,数据可改,所以默认数据各有一份,但是内存是有限度的,如果把父进程数据全部再拷贝一份,那么太浪费内存,甚至导致fork失败。通常通过写时拷贝实现,就是当父或子进程修改数据时,将要修改的数据拷贝一份,让子进程页表指向新的重复数据在发生修改
fork()执行后,父子进程的执行顺序是不确定的。
wait() 是父进程等待子进程退出后,才会继续执行wait()后面的代码。
程序结束后的输出是带缓冲的,调用putchar(*)与调用printf("*\n")的结果是不同的。
鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com
图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!