码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • fork函数,进程等待,进程终止,写时拷贝


    目录

    • 1.fork函数介绍
    • 2.fork之后,操作系统做了什么?
    • 3.写时拷贝(深浅拷贝)
      • 为什么要写时拷贝?
    • 4.fork失败的原因
    • 5.进程终止
      • 关于终止常见做法
    • 6.进程等待
      • 1.为什么要进行进程等待
      • 2.模拟进程等待

    1.fork函数介绍

    fork之前父进程独立执行,只有父进程没有子进程,fork之后,父子进程二个执行流分别执行,也就是说fork之后就有二个进程
    进程具有独立性,代码和数据必须独立的,代码只能被读取,因为会产生写时拷贝
    除了这些fork之后代码共享,那么fork之后,是不是只有fork之后的代码是被父子进程共享的,答案不是:fork之后,父子共享所有代码

    但是子进程执行的后续代码 != 共享的所有代码,只不过子进程只能从这里开始执行

    2.fork之后,操作系统做了什么?

    首先我们知道
    进程 = 内核的进程数据结构 + 进程的代码和数据

    创建子进程的内核数据(struct task_struct + struct mm_struct + 页表 )+ 代码继承父进程,数据以写时拷贝的方式,来进行共享
    这样子完成了独立性,因为这种办法,哪怕时子进程崩了,父进程也能单独运行

    3.写时拷贝(深浅拷贝)

    通常,父子代码共享,父子再不写入时,数据也是共享的,当任意一方试图写入,便以写时拷贝的方式各自一份副本
    写时拷贝本身就有操作系统完成的

    在这里插入图片描述

    为什么要写时拷贝?

    我们可以创建子进程的时候,就把数据分开,不行吗?
    答案是可以但是
    1.父进程的数据,子进程不一定全用,即使全用,也不一定全部写入,所以会有浪费空间的可能
    2. 最理想的情况,只有会被父子修改的数据,进行分离拷贝,不需要修改的共享,但是从技术角度复杂
    3. 如果fork的时候,就无脑拷贝数据给子进程,无疑会增加fork的成本(内存和时间)

    4.fork失败的原因

    1.系统有太多进程
    2.实际用户的进程超过了限制

    模拟进程创建失败代码

    #include
    #include
    #include
    
    int main()
    {
       
      for(;;)
      
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  • 相关阅读:
    NDK20b FFmpeg4.2.2 编译和集成
    Python每日一练——第5天:闰年问题升级版
    Visual Studio Code---介绍
    十年坎坷Java路,文哥从“菜鸟”到“大佬”的逆袭成长经历
    算法与数据结构 - 散列表
    ubuntu docker 安装 mysql
    3.6 shellcode编码技术
    小程序开发中的底部安全区域处理技巧
    HTTP代理SSL连接:保障网络安全的重要协议
    【Web前端】怎样用记事本写一个简单的网页-html
  • 原文地址:https://blog.csdn.net/li1829146612/article/details/126692339
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号