IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: 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函数不会直接输出到屏幕,当且仅当在如下情况下才会输出到屏幕
1.缓冲区满
2.程序结束
3.强制刷新缓冲区\n,fflush(stdout)刷新函数

主函数参数要定义参数个数argc,参数内容argv和环境变量envp

fork()复制进程
进程:一个正在运行的程序
PCB:进程控制块
进程描述符struct

僵死进程:子结束,父进程没有获得子进程的退出码,子进程变僵死进程。
孤儿进程:父进程比子进程先结束,子进程变为孤儿进程。
进程在复制时,子进程和父进程并发进行
逻辑地址(cpu所生成的地址,逻辑地址是内部和编程使用的,并不唯一) 物理地址(内存单元的真正地址)
写时拷贝技术

在进程进行时,父进程的返回值是子进程的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变量在内存中打印时,父进程和子进程用的是不是同一块空间?

不是同一块空间。分物理地址和逻辑地址。打印出来的都是逻辑地址,无法打印的是物理地址。

?

?

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-11-09 20:02:38  更:2021-11-09 20:04:07 
 
开发: 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-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码