linux(4)进程控制

fork函数,在我的前几篇博客中已经使用,在这篇博客里我们具体谈谈fork函数的相关知识

1. fork函数的说明如下

在这里插入图片描述
fork的功能是创建一个子进程,并且返回两个值,对于父进程返回子进程的PID,对于子进程返回0,这些在前面都说过了,不再浪费时间。
当进程调用fork时,内核会做的事情如下

  • 分配新的内存块和内核数据结构给子进程
  • 将父进程的部分数据结构内容拷贝至子进程
  • 添加子进程到系统进程列表中
  • fork返回,由调度器调度两进程运行。

当我们运行一个有fork()的程序时,其实运行了两个进程,不过要注意的是除非在代码中体现了对两进程运行顺序的管理,否则,谁先指向完全由调度器决定。

fork()的创建子进程的机制为写时拷贝
表现为:父子代码共享,父子不再写入的变量,数据也是共享的,当任意一方试图写入时,便以写时拷贝的方式各自有一份副本。
这种方法的好处是,节省资源,且加快创建时间。
fork常规用法

  • 利用if等条件判断语句,让父子进程分别执行不同的代码段
  • 一个进程执行不同的程序,利用exec函数实现。
    失败可能原因
  • 系统有太多进程
  • 实际用户的进程超过了限制

进程终止

进程终止有三种情况

  1. 代码运行完成,结果正确
  2. 代码运行完成,结果错误
  3. 代码异常
    一个代码运行完毕后,会对系统返回退出码,可以用指令echo $?查看最近一次的进程退出码,进程退出码是返回给操作系统用于判断进程情况的。
    值和main()函数的返回值相同,在linux中用execl()或者_execl()
    也能结束函数,返回退出码,不同的是,
    exit()函数在调用exit 系统调用前要检查文件的打开情况,把文件缓冲区中的内容写回文件。_execl直接使进程停止运行,清除其使用的内存空间,并清除其在内核的各种数据结构,无论在main函数或者在其他函数中。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值