多任務并發:進程管理的核心奧秘

多任務(并發):讓系統具備同時處理多個任務的能力

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. 學習…