多任务(并发):让系统具备同时处理多个任务的能力

1. 多进程

2. 多线程

3. 进程间通信

一、进程的基本概念

1. 什么是进程?

        正在运行的程序,其运行过程中需要消耗内存和CPU。

        进程的特点:

动态性:进程是程序运行的一次执行过程,有创建、运行、结束等生命周期。

独立性:每一个进程拥有其独立的内存空间和系统资源,相互之间一般不直接干扰。

并发性:操作系统可以同时运行多个进程,通过CPU调度实现。

2.程序和进程有什么区别?

程序(Program)

        定义:是一组静态的数据集合,存储在硬盘空间,是计算机执行特定任务的代码和数据的集合。

程序运行起来可以产生进程;

 一个程序可以产生多个进程

        特点:静态的:不运行时只是一堆代码和数据,不占用系统资源(除了磁盘空间)。

                可复用的:同一个程序可以被多次执行(例如多次打开同一个软件)。

                持久的:程序文件会长期保存在存储设备中,直到被主动删除。

进程(Process)

        定义:进程是程序的一次动态执行过程,是操作系统进行资源分配和调度的基本单位。当程序被加载到内存中运行时,就成为了进程。

        特点:动态性:进程是程序运行的一次执行过程,需要消耗内存和CPU,有创建、运行、结束等生命周期。

                独立性:每一个进程拥有其独立的内存空间和系统资源,相互之间一般不直接干扰。

                并发性:操作系统可以同时运行多个进程,通过CPU调度实现。

                一个进程中也可执行多个程序

二、进程的产生

进程产生时,操作系统都会为其分配0-4G的虚拟内存空间。

三、进程的调度

CPU:数据处理速度快

宏观并行,微观串行

cpu调度算法

1、时间片轮询算法

2、先来先服务,后来后服务(任务队列)

3、短作业优先调度

4、高优先级先执行,低优先级后执行

四、进程的状态

     操作系统进程进程三态图:

Linux操作系统的进程状态:

1.运行态(用户运行态、内核运行态)     R
正在执行,且被CPU任务调度所执行的进程

2.就绪态    R
正在执行,没有CPU任务调度执行的进程(只缺少cpu)

3.可唤醒等待态    S
也称为睡眠态,阻塞等待资源的进程

4.不可唤醒等待态 D
不想被CPU任务调度所打断的进程任务可以设置为不可唤醒等待态

5.暂停态    T
被暂停执行的进程

6.僵尸态    Z
进程执行结束,空间没有被回收

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

五、进程的消亡

    1. 进程执行结束(进程退出)

2. 回收进程资源空间


六、进程相关命令

PID:进程的ID号

PPID :父进程ID号

父进程:产生子进程的进程称为父进程

子进程:父进程产生出来的新进程即为该父进程的子进程

1. ps  -aux

查看进程相关参数:PID、状态、CPU占有率、内存占有率

ps -aux | grep ./a.out

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

grep : 字符串查找:在输入中查找和后面字符串相关的数据

2. top

动态查看进程的相关参数:CPU占有率、内存占有率

3. ps -ef

查看该进程的ID和父进程ID

4. pstree

查看进程的产生关系
pstree -p
查看进程的产生关系(有PID号)

         pstree -sp  进程PID号
查看某个指定的进程的产生关系

5. kill -信号的编号/信号的名称  PID

向进程发送信号,让进程的状态发生变化

kill -l
查看系统支持的信号

        结束一个进程:
kill -9 PID
kill -SIGKILL PID
killall -9  进程名称

         +前台进程
后台进程
jobs
查看当前终端的后台进程
fg 后台进程编号
让后台进程切换成前台进程

七、进程相关编程

1.fork函数

需要的头文件:#include <sys/types.h>        #include <unistd.h>

函数原型:pid_t fork(void);

功能:复制当前进程(父进程),生成一个新进程(子进程)。

复制特性:
子进程完全拷贝父进程0-3G的虚拟内存空间,但两者拥有独立的地址空间,后续修改互不影响
子进程拷贝父进程PCB(进程控制块)块中的部分内容:PID不拷贝

返回值:

关键特点:调用一次,返回两次:

父进程中,fork()返回子进程的进程ID(PID,非负整数)

子进程中,fork()返回0。

若创建失败,父进程会返回-1。

执行顺序:父进程和子进程的执行顺序由操作系统调度器决定,不确定谁先运行。

getpid(); 获取当前进程自己的PID号

getppid():获取当前进程父进程的PID号

注意:
1. 子进程完完整整拷贝父进程0-3G虚拟内存空间。

        2. 父子进程栈区、数据区、文本区、堆区完全独立,数据不共享

        3. 要想共享数据,需要使用进程间通信方式实现

练习:

1. 使用fork函数创建新进程,父进程打印自己的PID和自己子进程的pid,子进程中打印自己的PID和父进程的PID

#include<stdio.h>int main()
{pid_t pid = fork;if(pid > 0){printf("自己的PID:%d 自己子进程的PID",getpid(),pid);}else if(pid == 0){printf("自己的PID:%d 自己父进程的PID",getpid(),getppid());}else if{perror(fork error);}return 0;
}

2.进程调度:操作系统完成

1.进程退出:return、exit()相关函数
1)main中return
2) exit ()、_exit() :结束一个进程
exit (0) : 正常退出
exit (非0) :由于进程产生了某种问题,需要主动退出进程
2.回收资源空间:wait()、waitpid()

僵尸进程:父进程未回收已终止子进程的资源,        退出后,但其资源空间未被父进程回收
如何避免僵尸进程产生:
1.  子进程退出后,父进程及时为其回收资源空间
2.  让该进程成为一个孤儿进程,结束时被操作系统中的系统进程回收

        孤儿进程:父进程先消亡,其对应的子进程成为一个孤儿进程,会被系统进程所收养
(守护类的进程)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/918759.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/918759.shtml
英文地址,请注明出处:http://en.pswp.cn/news/918759.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高效TypeScript开发:VSCode终极配置指南

⚙️ VSCode TypeScript 专属效率设置大全 (纯 settings.json 配置) // .vscode/settings.json {/* &#x1f50d; 引用与类型追踪 */"typescript.referencesCodeLens.enabled": true, // 显示引用计数(点击查看所有引用处)"typescript.implementationsCod…

资本的自我否定:四重矛盾中的历史辩证法

资本自诞生以来&#xff0c;便以“增殖”为唯一使命&#xff0c;如同一个不知疲倦的扩张机器&#xff0c;在推动生产力飞跃的同时&#xff0c;也埋下了自我毁灭的种子。这种自我否定并非外部力量的强加&#xff0c;而是其内在逻辑的必然展开——从价格战的困局到经济危机的周期…

Linux系统安装Docker及常见问题解决

1.1 解决安装Docker问题 Linux的发行版本&#xff0c;大多数还是在用CentOS&#xff0c;虽然CentOS已经不更新了。。。。。CentOS因为不更新了&#xff0c;所以很多的yum源都失效了。导致安装Docker失败&#xff01; 只需要更新一下yum源。直接将之前默认的yum源替换为阿里的…

CICD-Devops整合Kubernetes-4

Devops整合Kubernetes Kubernetes部署快速安装Kubernetes **官网&#xff1a;**https://kuboard.cn/选择默认支持docker的版本1.19前置环境部署 所有节点均需执行同操作 # 配置主机名解析 [rootKubernetes-master ~]# echo "127.0.0.1 $(hostname)" >> /etc/ho…

C/C++ 指针与内存操作详解——从一级指针到字符串转换函数的完整解析

C/C 指针与内存操作详解——从一级指针到字符串转换函数的完整解析 本文将带你系统理解 一级指针与二级指针的区别、数组拷贝的注意事项、字符串转整数函数实现 等 C/C 编程中常见且易混淆的知识点&#xff0c;并配合详细代码示例与常见坑点分析&#xff0c;让你从入门到掌握。…

Java -- HashSet的全面说明-Map接口的常用方法-遍历方法

目录 1. HashSet的全面说明 2. Map接口实现类的特点 注意&#xff1a;讲的是JDK8的Map接口特点 3. Map接口的常用方法 4. Map遍历方法 1. HashSet的全面说明 1. HashSet实现了Set接口 2. HashSet实际上是HashMap 3. 可以存放null值&#xff0c;但是只能有一个null 4. H…

【python】类型注解

参考【为什么越来越多Python项目都在写类型注解&#xff1f;】 https://www.bilibili.com/video/BV1sW81zbEkD/?share_sourcecopy_web&vd_source9332b8fc5ea8d349a54c3989f6189fd3代码示例使用变量 : 类型名 来注解。""" python类型注解 """…

零基础入门PostgreSQL教学视频,持续更新

PostgreSQL数据库在国内的迅速发展&#xff0c;引起了很多数据库从业者的注意&#xff0c;不少人都想学习这个热门的技术&#xff0c;但是毕竟有PostgreSQL有自己的特点与优势&#xff0c;不同于Oracle、MySQL等数据库&#xff0c;想要快速入门PostgreSQL技术需要下一些功夫。一…

PageAdmin与WordPress哪个适合企业建站

对于企业建站需求&#xff0c;PageAdmin和WordPress各有特点&#xff0c;以下是综合对比分析&#xff1a; ‌功能与专业性‌ ‌PageAdmin‌&#xff1a;专为企业级网站设计&#xff0c;内置自定义字段、表单和多站点管理功能&#xff0c;适合需要高定制化的企业官网、政府或学校…

微服务单元测试组件

背景 微服务的调试&#xff0c;哪怕是简单问题&#xff0c;需要启动9个服务&#xff0c;ui/nginx 网关 应用 auth 基础数据服务 redis nacos 平台服务 &#xff0c;效率差得不行&#xff0c;准备开发一个支持微服务环境的单元测试组件&#xff0c; 组件解决3个问题&#xff1a…

从零到一的 Python CI/CD 实战指南:用 GitHub Actions 与 Jenkins 打造稳定、可持续交付的工程力

从零到一的 Python CI/CD 实战指南:用 GitHub Actions 与 Jenkins 打造稳定、可持续交付的工程力 当我们把第一行 Python 程序跑通时,成就感像破土的新芽;而当它在每次提交后自动被测试、打包、发布、上线,稳定服务成千上万的用户,那是“工程化”的成熟。本文带你从概念到…

如何在保持人设新鲜感的同时,强化受众记忆点?

保持人设新鲜感与强化受众记忆点&#xff0c;本质是 “动态创新” 与 “核心稳定” 的平衡艺术。既需通过有序变化避免受众审美疲劳&#xff0c;又需让核心特质在重复中加深烙印&#xff0c;关键在于建立 “锚点稳定、外延流动” 的内容体系。一、锚定 “核心记忆单元”&#x…

Ubuntu 22.04 离线环境下 Python 包与 FFmpeg 安装全攻略​

Ubuntu 22.04 离线环境下 Python 包与 FFmpeg 安装全攻略 在没有网络连接的 Ubuntu 22.04 环境中安装软件包常常会遇到各种依赖问题&#xff0c;尤其是 Python 库和 FFmpeg 这类依赖复杂的工具。 本文将详细介绍如何在离线环境中安装指定的 Python 包&#xff08;包括 OpenCV、…

ESP32 I2S音频总线学习笔记(六):DIY蓝牙音箱教程

往期相关文章&#xff1a; ESP32 I2S音频总线学习笔记&#xff08;一&#xff09;&#xff1a;初识I2S通信与配置基础 ESP32 I2S音频总线学习笔记&#xff08;二&#xff09;&#xff1a;I2S读取INMP441音频数据 ESP32 I2S音频总线学习笔记&#xff08;三&#xff09;&#…

springboot博客实战笔记02

一、评论功能&#xff1a; 注意要先登录之后才能进行评论&#xff0c;所有把评论加入到登录拦截器当中 Overridepublic void addInterceptors(InterceptorRegistry registry) {//拦截test接口&#xff0c;后续实际遇到需要拦截的接口时&#xff0c;在配置为真正的拦截接口regis…

ThinkPHP+Mysql 灵活用工小程序-技术深度解析与实践指南

一、模块设计分包商&#xff1a;税地注册公司&#xff0c;用于在当地申请有利的税收政策&#xff0c;是实际报税公司。 代理商&#xff1a;代理商可以邀请客户使用本平台&#xff0c;平台会给予代理商一定的服务费差价作为佣金。 客户&#xff1a;使用本平台进行工资发放的…

开源数据发现平台:Amundsen 第1部分:基础入门与本地环境设置

Amundsen 是一个数据发现和元数据引擎&#xff0c;旨在提高数据分析师、数据科学家和工程师与数据交互时的生产力。目前&#xff0c;它通过索引数据资源&#xff08;表格、仪表板、数据流等&#xff09;并基于使用模式&#xff08;例如&#xff0c;查询频率高的表格会优先于查询…

Linux编程--进程

1、基本概念&#xff1a;进程&#xff1a;是程序动态执行的过程&#xff0c;包括创建、调度、消亡程序&#xff1a;存放在外存中一段数据的集合虚拟地址&#xff1a;进程使用的逻辑地址&#xff0c;有操作系统管理&#xff0c;不直接对应物理内存物理地址&#xff1a;实际内存的…

【开源工具】基于硬件指纹的“一机一码”软件授权系统全实现(附完整源码)

🚨 紧急预警!你的软件正在被白嫖?这套Python软件加密授权方案让破解者当场崩溃 🌈 个人主页:创客白泽 - CSDN博客 🔥 系列专栏:🐍《Python开源项目实战》 💡 热爱不止于代码,热情源自每一个灵感闪现的夜晚。愿以开源之火,点亮前行之路。 🐋 希望大家多多支持…

机器学习算法篇(八)-------svm支持向量机

目录 ​​1. SVM 的核心原理&#xff08;必须掌握&#xff09;​​ ​​2. Python 中的实践重点​​ ​​(1) Scikit-learn 的 SVM 实现​​ ​​(2) 数据预处理​​ ​​(3) 模型评估与调优​​ ​​3. 学习侧重点优先级​​ ​​4. 经典案例实践方向​​ ​​5. 学习…