| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> Linux进程复制 -> 正文阅读 |
|
[系统运维]Linux进程复制 |
程序运行(打印到屏幕),printf函数不会直接输出到屏幕,当且仅当在如下情况下才会输出到屏幕 主函数参数要定义参数个数argc,参数内容argv和环境变量envp fork()复制进程 僵死进程:子结束,父进程没有获得子进程的退出码,子进程变僵死进程。 在进程进行时,父进程的返回值是子进程的ID号,子进程的返回值固定为0。 在进程进行时,父子进程相互独立运行,互不干扰。会在运行时发现进程运行时,执行别的操作,操作并没有被阻塞,此时正在执行的复制进程仍在进行,互不干扰。如下图: ? 练习: 1.会输出几个A? 会输出3个A。逻辑或。首先命令成功,第一个fork执行,产生一个子进程。逻辑或有一个为真,则结果为真。父进程第一个fork>0,父进程满足,子进程第一个fork<0,不满足,则子进程再执行。所以一共打印3个A。 ? 延伸: fork()&&fork()会输出几个A? 逻辑与。第一个fork执行,产生一个子进程,逻辑与要两边都成立,结果才为真。第二个fork若为0,则第一个无论为0或1结果都为假。由于父进程>0,所以只要第二个fork为真,则结果为真。所以第二个fork也要执行一次,产生父进程的第二个子进程,所以一共有三个A。 2.产生了几个进程·?打印了几个A?4,6 ?在第一轮循环时调用了一次fork,父进程和子一代各打印了个A。第二轮循环,父进程又调用fork复制出子二代,子二代和父进程各打印一个A,此时子一代i=0变为i=1,子一代调用fork复制出子一代子进程,子一代和子一代子进程各打印1个A。所以产生了四个进程,打印了6个A。 延伸:产生了几个进程·?打印了几个A?8 ? print有缓冲区,?在缓冲区没有输出,当fork时,会将缓冲区的值复制一份·。 起初刚开始父进程调用fork生成子一代(1),父进程继续进行,此时父进程在缓冲区存放A, 在程序结束时输出,父进程在i=1(缓冲区A并未输出)时继续循环,此时生成子一代(2),同时子一代(2)复制父进程缓冲区内容(缓冲区存放一个A),此时父进程执行完fork执行print,在缓冲区在存放一个A(此时共两个A),父进程继续循环,i=2,父进程结束,输出缓冲区的两个A。 子一代(1)被创建后执行print,在自己缓冲区存放一个A,i=1满足条件,子一代(1)继续循环,此时fork创建子一代(1.1),子一代(1.1)继承子一代(1)缓冲区的A,子一代(1)fork结束后,print在自己缓冲区存放一个A(此时有两个A),循环结束,子一代(1)打印出两个A。 子一代(2)在创建时继承父进程的A,然后执行print,在自己的缓冲区存放一个A(此时两个A),i=2,子一代(2)不满足循环条件,退出程序打印两个A。 子一代(1.1)在创建时继承父进程的A,然后执行print,在自己的缓冲区存放一个A(此时两个A),i=2,子一代(1.1)不满足循环条件,退出程序打印两个A。 3.n变量在内存中打印时,父进程和子进程用的是不是同一块空间? 不是同一块空间。分物理地址和逻辑地址。打印出来的都是逻辑地址,无法打印的是物理地址。 ? ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 23:25:31- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |