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

linux5-多任务--进程fork()

一.多任务:让系统具备同时处理多个任务的能力

1.如何实现多任务

1.1进程:操作系统上正在运行的程序,需要消耗内存和CPU

1.1.1 进程的生存周期:创建、调度、消亡
1.1.1.1进程的创建:每个进程被创建时,操作系统会为该进程分配4G的虚拟内存空间。

1.1.1.2进程的调度:微观串行、宏观并行

cpu在调度时常用的调度算法:时间片轮转调度算法、高优先级优先算法、先来先服务后来后执行、短作业优先

进程的状态:三态图

1

linux进程七态图

1.运行态(用户运行态、内核运行态) R

正在执行,且被CPU任务调度所执行的进程
2.就绪态 R
正在执行,没有CPU任务调度执行的进程(只缺少cpu)
3.可唤醒等待态 S
也称为睡眠态,阻塞等待资源的进程
4.不可唤醒等待态 D
不想被CPU任务调度所打断的进程任务可以设置为不可唤醒等待态
5.暂停态 T
被暂停执行的进程
6.僵尸态Z

进程执行结束,空间没有被回收
7.结束态 X
进程执行结束,空间被回收

1.1.1.3进程的消亡

提出进程

回收进程

1.1.2进程与程序的区别
进程程序
存储区域不同内存硬盘
状态不同动态执行过程、短暂的静态的数据集合、永恒的
关系一个进程可以运行多个程序程序运行可以产生多个进程
进程需要消耗CPU,进程间会资源竞争

1.1.3进程的常用命令

ps -aux:查看系统中所有进程的信息和状态

PID:进程的ID号   PPID:父进程的ID号

父进程:创建新进程的进程称父进程

子进程:创建出的新进程

操作系统运行时会打开一号进程,由一号打开2、3……进程

top:动态查看当前系统进程状态及CPU/内存占有率

ps -ef:查看进程状态信息和父子进程ID号

pstree:查看进程间的关系  pstree -p(关系族谱可带ID号) pstree -p id号(可查看某id的关系族谱图)

kill(给进程发送信号)

kill -l 查看kill相关命令的信号数

kill -信号编码 pid让某pid进程执行编码

ps -aux | grep a.out(组合命令)

|管道:将前面的输出作为后面的输入

grep(查找匹配)

jobs(查看后台进程编号)(当前终端)

fg(将后台编号将进程调到前台)

pid_t fork(void);

功能:通过拷贝父进程产生一个新的子进程

           拷贝父进程0-3G的虚拟内存

           内核中拷贝父进程的PCB块更新自己的PID号

            父子进程用户空间互相独立,数据不独立

参数无

返回值:

        成功:子进程的ID号返回给父进程、0返回给子进程

        失败:-1返回父进程

当产生子进程后,根据FIFO调度算法,先执行父进程,由于内核的PCB保存了父进程的产生子进程的位置,继续向下执行。

fork()&&fork()||fork()为五个进程,要根据返回值查看,是否fork()

pid_t  getpid() ;获取子进程ID

pid_t  getppid(); 获取父进程ID


http://www.kler.cn/a/554659.html

相关文章:

  • 力扣hot100 ——和为k的子数组 前后缀和(积)各种情况总结
  • 大模型高效注意力机制全解析:FlashAttention 与稀疏注意力实战
  • 【自动化脚本工具】Hammerspoon (Mac)
  • 基于STM32与IFX007T的电机驱动全解析(无人机/机器人实战)
  • 【队列】循环队列(Circular Queue)详解
  • 美的楼宇科技基于阿里云 EMR Serverless Spark 构建 LakeHouse 湖仓数据平台
  • Junit——白盒测试
  • 前端js题目大全
  • 区块链技术:构建区块链生态的核心要素
  • uniapp录制语音
  • 网络安全入门防御与加固(二)
  • Windows 10操作系统上安装PHP
  • 广度优先搜索--之重生之我是蒟蒻,从入坟到入坑式讲解
  • 练习题:45
  • JavaScript系列(78)--Service Worker 深入解析
  • RAGFLOW使用flask转发的open ai接口
  • BFS 解决 FloodFill 算法(典型算法思想)—— OJ例题算法解析思路
  • 神经网络八股(2)
  • Unity 位图字体
  • 3.1 actor基本框架(c#的Akka.Actor模式)