当前位置: 首页 > news >正文

Linux中的fork详解

1、fork与execl

        fork是产生一个新的进程,底层原理调用的是系统调用的clone函数,创建了新的PCB(进程控制块),而execl是一个程序替换函数,是将其调用位置之后的程序代码全部替换为目标代码,当前进程的PCB并不会退出

2、fork后,子进程保留了父进程的什么?

        子进程保留了父进程的环境变量和当前路径,但是信号相关以及进程号并不会被继承,这些都是进程间独立互不影响的东西

3、pid_t waitpid(pid_t pid, int* status, int options)

        pid=0时,表示等待指定的子进程退出;pid=-1时,表示等待任意的子进程退出;第二个参数用来接受退出码,是一个输出型参数;而options,常用的一个选项是WNOHANG,表示父进程在子进程退出以前不处于阻塞状态

        waitpid默认是阻塞等待指定进程或者任意进程退出,而使用选项WNOHANG时,父进程不会阻塞,即使最后也没有子进程退出,也不会报错,返回值为0

4、exit与_exit

        两者都会让当前进程直接退出,但是在文件缓冲区的处理上有所差别:前者是先刷新文件缓冲区,再退出进程;后者是直接释放所有资源,不刷新文件缓冲区,直接退出

5、fork创建子进程的理解

基于以下代码判断除了主进程,一共创建了多少个进程?

int main()
{
fork();
fork()&&fork()||fork();
fork();
return 0;
}

一共有19个

这里我们对五个fork函数分别编号为1、2、3、4、5(将在n号fork创建的进程都成为pn)

在运行到一号fork时,创建了p1;主进程和p1运行到二号fork时,两者都创建了p2(两个p2);但是这时,主进程和p1可以执行三号fork创建了p3(两个)而两个p2因为二号fork时接受的返回值为0,所以不能执行3号fork;在运行到四号fork的时候,主进程和p1已经不能再执行4号fork,而其他的进程(两个p2和两个p3各创建一个p4);现在已经有了10个进程,他们再在5号fork出各产生一个p5这样总共就有10 * 2 = 20个进程,而我们又不算主进程,所以一共有19个进程被创建。                        


文章转载自:

http://yaEieNau.dqcmq.cn
http://JGiLnUT3.dqcmq.cn
http://Sy0K9XJg.dqcmq.cn
http://NJOdazzd.dqcmq.cn
http://PMXujKPv.dqcmq.cn
http://2JJVTquc.dqcmq.cn
http://TDlkoEdm.dqcmq.cn
http://75j23so2.dqcmq.cn
http://QSOOW8hM.dqcmq.cn
http://WQ3xcopk.dqcmq.cn
http://yjpCTkO8.dqcmq.cn
http://KHxFGesm.dqcmq.cn
http://Mo3lLYhv.dqcmq.cn
http://AC39fL8T.dqcmq.cn
http://S2NVDGow.dqcmq.cn
http://CXnCjFUB.dqcmq.cn
http://CfxDBQX4.dqcmq.cn
http://XAmX70VM.dqcmq.cn
http://BnJjzmXv.dqcmq.cn
http://Uev8PndM.dqcmq.cn
http://UsbdnpZu.dqcmq.cn
http://SwK2uycY.dqcmq.cn
http://LwH7ZaOo.dqcmq.cn
http://D0gytpHg.dqcmq.cn
http://qRCZvkP1.dqcmq.cn
http://6ILPCWWg.dqcmq.cn
http://WPr8Nlfc.dqcmq.cn
http://5auI9YCU.dqcmq.cn
http://H2XOXKqV.dqcmq.cn
http://ihbqxP48.dqcmq.cn
http://www.dtcms.com/a/368518.html

相关文章:

  • 【生产故事会】Kafka 生产环境参数优化实战案例
  • 【Kafka】Kafka使用场景用例Kafka用例图
  • 学习 Android (二十) 学习 OpenCV (五)
  • CodePerfAI体验:AI代码性能分析工具如何高效排查性能瓶颈、优化SQL执行耗时?
  • 【leetcode】46. 全排列
  • GD32入门到实战34--ARM启动流程
  • 针对nvm不能导致npm和node生效的解决办法
  • LeetCode 3027.人员站位的方案数 II:简单一个排序O(n^2)——ASCII图解
  • 玳瑁的嵌入式日记D33-0904(IO多路复用)
  • 硬件 - 关于MOS的使用
  • 什么是selenium自动化测试
  • 【智启未来园区】从“管理”到“治理”,重新定义智慧园区新范式!
  • 关于无法导入父路径的问题
  • Spring Boot 和 Spring Cloud: 区别与联系
  • 认识 Flutter
  • 基于单片机智能热水壶/养生壶设计
  • Android8 binder源码学习分析笔记(二)
  • 【51单片机8*8点阵显示箭头动画详细注释】2022-12-1
  • 笔记三 FreeRTOS中断
  • 【连载 2/9】大模型应用:(二)初识大模型(35页)【附全文阅读】
  • 为什么动态视频业务内容不可以被CDN静态缓存?
  • 【视频系统】技术汇编
  • 如何提升技术架构设计能力?
  • 【数据分享】上市公司数字化转型相关词频统计数据(2000-2024)
  • K8S的Pod为什么可以解析访问集群之外的域名地址
  • (4)什么时候引入Seata‘‘
  • React 组件基础与事件处理
  • 【Linux游记】基础指令篇
  • 前端-组件通信
  • 知识点汇集——web(三)