码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【操作系统】7/35进程原语2


    读时共享写时复制

    单进程模式,一个父进程,父子进程映射就可以了,不需要共享。

    不需要拷贝可以。可以直接用。

    如果对子进程进行修改,一定是会断掉映射的。

    修改了,就进行拷贝。

    如果父进程修改了呢?

    父进程修改时,要维护子进程的修改副本,因此,父进程修改的时候,也出发写拷贝。

    否则会出现,父进程一直随着子进程在变化。很不好的情况。要及时备份,保证稳定性。

    例如之前的代码,如果没有写时复制,那么每个子进程的i都是不变的。


    waitpid

    进程回收函数。

    pid_t pid = waitpid(pid_t pid, int* status, int opt)

    回收僵尸进程,支持非阻塞回收方案。

    pid参数:

    1. 小于-1:指的是组,加负号就是组id,回收特定组里的id。跨组。
    2. 等于-1:回收任意子进程。任意。
    3. 等于0:同组回收,回收调用的进程。同组。
    4. 大于0:特定。

    opt参数:opt=WNOHANG(非阻塞)

    返回值:

    1. 大于0:成功了,返回的是僵尸进程的pid。
    2. 等于0:非阻塞,子进程无需回收。
    3. 等于-1:回收失败。

    非阻塞,可以干点别的,可以让父进程交替工作。

    阻塞,就得一直等着。

    非阻塞的waitpid函数,使得更加灵活。

    非阻塞轮询回收。

    1. int main(void){
    2. pid_t pid;
    3. pid_t zpid;
    4. int i=0;
    5. for(i;i<5;++i){
    6. pid=fork();
    7. if(!pid)break;
    8. }
    9. if(pid>0){
    10. printf("im father, and my pid is %d\n",getpid());
    11. while((zpid=waitpid(-1,NULL,WNOHANG))!=-1){
    12. if(zpid>0){
    13. printf("parent wait zombie success...\n");
    14. }else{
    15. printf("parent running...\n");
    16. sleep(1);
    17. }
    18. }
    19. }else if(!pid){
    20. printf("im child NO %d, and my pid is %d\n",i,getpid());
    21. sleep(i);
    22. exit(i);
    23. }else{
    24. perror("fork call failed\n");
    25. exit(1);
    26. }
    27. return 0;
    28. }

    其中,在父进程当中,必须把zpid赋值的过程写进循环里。

    因为每次都要进行一个赋值,然后判断,否则就死循环了。

    输出结果:

    LinuxDemo01

    关于进程校验。

  • 相关阅读:
    实现按钮悬停动画
    Linux基础知识及常见指令
    Linux基础知识,这里有很多内容可以看看~
    COSCon'22第七届中国开源年会火热筹备中,第一波赞助伙伴已集结,一起上车共赴开源盛宴吧~...
    Django5+React18前后端分离开发实战05 序列化
    SQL中的索引
    一个开源完全免费的无损视频或音频的剪切/裁剪/分割/截取和视频合并工具
    药品研发--检验记录与检验报告书的书写细则
    华为程序员熬夜整合SpringCloud 源码之负载均衡 Ribbon,2W字带你深度分析
    datetime模块
  • 原文地址:https://blog.csdn.net/callmejielun/article/details/126249891
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号