知识拓展7

1、fork函数特点:
①被调用一次却返回两次,可能有三种不同的返回值
1)父进程的fork,成功返回子进程的PID,失败返回-1,errno被设置。
2)子进程的fork,成功返回0,失败返回-1,errno被设置。
在这里插入图片描述
结果:
在这里插入图片描述
父进程结束才执行子程序
若加上sleep
在这里插入图片描述
结果:
在这里插入图片描述
加上sleep后父进程与子进程交叉执行
原因:父进程中有sleep,父进程中的程序执行到sleep进行休眠,转而执行子进程。

相关问题:
1、fork出一个子进程,父子进程执行的先后顺序是不确定的,如果先执行父进程,再执行子进程,父进程中没有wait和sleep,是否先把父进程执行完,再执行子进程?还是两个进程是一块执行的?
答:进程的执行顺序是要看操作系统如何进行进程调度的,具体看调度算法。
比如,如果基于时间片轮转调度算法,假设父进程先执行,本时间片内没有执行完,则会发生进程切换,即调度程序从就绪队列中取出一个进程在下一个时间片内执行,而本进程保存进程信息和状态然后插入就绪队列,等待调度程序重新调度。
2、如果父进程中有sleep,父进程中的程序执行到sleep进行休眠,转而执行子进程。子进程中的程序执行完了再返回父进程中执行,还是休眠时间到了返回父进程中执行,还是其他?
答:sleep是休眠,也就是进程阻塞,从就绪队列取出本进程,插入阻塞队列。sleep时间到,进程变为就绪状态,插入就绪队列,等待调度程序调度,也就是说,执行不执行看调度程序,阻塞一定不执行,就绪也不一定是马上执行的。

②子进程是复制拷贝父进程而不是共享资源,两者间互不干扰,所以相同参数父进程中改变子进程不会受到其影响。

2、vfork函数特点:
vfork是对fork的改进,vfork是为子进程立即执行exec的进程而专门设计的
fork与vfork区别:
1、fork子进程拷贝父进程的数据
vfork子进程与父进程共享数据
2、fork:Linux不保证子进程会比父进程先执行或晚执行
vfork:保证子程序先运行,共享父进程资源
在这里插入图片描述
在这里插入图片描述
注意:子进程结束一定要加exit(0)安全退出
结果:先执行子进程再进行父进程,且子进程父进程共享资源

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值