Linux軟件編程:進程和線程(進程)

進程

一、基本概念

  • 進程:是程序動態執行過程,包括創建、調度、消亡
  • 程序:存放在外存的一段數據的集合

二、進程創建

(一)進程空間分布

  1. 每個進程運行起來后,操作系統開辟0-4G的虛擬空間
  2. 進程空間:用戶空間+內核空間(不允許用戶訪問)
  3. 用戶空間:文本段(文本區)+數據段(數據區)+系統數據段(堆區、棧區)
  4. 文本段:存放代碼和指令
  5. 數據段:字符串常量、已初始化全局變量/靜態變量,未初始化全區變量/靜態變量
  6. 數據區存放數據特點:未初始化值為0、編譯時開辟空間、程序結束回收空間。
  7. 系統數據段:堆區(malloc空間)、棧區(局部變量、函數運行)
  8. 堆區存放數據特點:malloc申請堆區空間、free釋放堆區空間、注意避免內存泄漏
  9. 棧區存放數據特點:未經初始化值為隨機值,執行到變量定義開辟內存空間,超過變量作用? 域回收變量空間

(二)虛擬地址和物理地址

  1. 虛擬地址:所有能被用戶看到的地址均為虛擬地址,表示用戶可以尋址的范圍
  2. 物理地址:內存存放數據對應的實際硬件物理地址
  3. MMU:虛擬地址與物理地址之間的映射由內存單元(MMU)完成

(三)多進程存儲

? ? ? ? 1.存儲方式

? ? ? ? ? ? ? ? 1.1:多個進程空間在操作系統中存儲時,空間是獨立的(物理地址時獨立的)

? ? ? ? ? ? ? ? 1.2:多個進程在操作系統中共用一個虛擬內存空間(虛擬地址是共享的)

(四)進程的調度

????????1.常見的進程調度算法

? ? ? ? ? ? ? ? 1.1先來先執行,后來后執行

? ? ? ? ? ? ? ? 1.2高優先級調度算法

? ? ? ? ? ? ? ? 1.3時間片輪轉調度算法

? ? ? ? ? ? ? ? 1.4多級隊列調度算法

? ? ? ? ? ? ? ? 1.5負載均衡調度算法

? ? ? ? 2.進程調度本質

? ? ? ? ? ? ? ? 2.1宏觀并行,微觀串行? ? ? ??

? ? ? ? ? ? ? ? 2.2宏觀分析:一個CPU同時執行多個進程任務

? ? ? ? ? ? ? ? 2.3微觀分析:一個CPU在多個進程任務中高速切換保障多任務執行

(五)進程相關的命令

? ? ? ? 1.top

? ? ? ? 2.ps -ef

? ? ? ? 3.ps-aux

? ? ? ? 4../a.out &:后臺執行進程(a.out)任務

? ? ? ? 5.fg 編號(通過jobs查看):后臺執行的任務放到前臺執行

? ? ? ? 6.jobs:查看終端下所有后臺進程任務

? ? ? ? 7.nice/renice

? ? ? ? 8.kill/killall

(六)進程的狀態

進程狀態標識含義
就緒態/運行態R進程位于CPU任務調度的隊列中
可喚醒等待態S

等待某個資源的來,資源到來后被喚醒加入調度隊列

等待過程可以被打斷

不可喚醒等待態D

等待某個資源的來,資源到來后被喚醒加入調度隊列

等待過程可以被打斷

停止態T用戶人為讓進程任務暫停等待
僵尸態Z進程代碼運行結束,空間尚未被回收
結束態X進程代碼運行結束,空間被回收

三、進程相關函數接口

? ? ? ? 1.fork

注意:

  • 子進程拷貝父進程文本段、數據段、系統數據段
  • 父進程與子進程空間獨立,同一份代碼中的變量和數據都會在父子進程中各有一份,父子進程修改自己的空間數據不會影響對方的空間
  • 進程的PID不一樣
  • fork的返回值不一樣,父進程返回子進程的PID,子進程返回0
  • PID:父進程一定是>0的

? ? ? ? 2.getpid 和getppid

? ? ? ? 3.exit與_exit

? ? ? ? 注意

  • 在主函數中調用exit和return功能保持一致
  • return在函數內部將結束該函數
  • exit在函數內部會將進程結束
  • exit會在結束前刷新緩存區
  • _exit不會刷新緩存區

? ? ? ? 4.進程回收

? ? ? ? ? ? ? ? 4.1wait和waitpid

注意:

  • wait具有阻塞等待功能,等到有子進程結束才會回收子進程繼續向下執行
  • wait可以實現父子進程任務的同步
  • waitpid可以非阻塞回收子進程空間
  • waitpid可以回收指定子進程空間

????????

四、進程消亡

(一)孤兒進程:父進程先結束,子進程會成為孤兒進程,被init進程收養

(二)僵尸進程

? ? ? ? 1.是每個進程結束必然經歷的階段

? ? ? ? 2.產生原因:子進程結束后,父進程沒有回收子進程空間,導致進程執行結束,空間依然被占用的狀態

? ? ? ? 3.如何吧面產生僵尸進程?

  • ? ? ? ? 父進程先結束,子進程成為孤兒進程,孤兒進程被init收養,子進程在結束,init進程回收進程空間
  • 子進程結束,父進程回收子進程空間

五、exec函數族

? ? ? ? 1.exec函數族

  • 利用進程空間執行另外一份代碼
  • exec常用搭配fork使用,fork負責創建新的子進程,exec負責讓子進程執行自己的代碼

? ? ? ? 2.主函數傳參

? ? ? ? 3.system函數

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/95548.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/95548.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/95548.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Mybatis學習筆記(五)

分頁插件與性能優化 分頁插件配置 簡要描述:MybatisPlus分頁插件是基于物理分頁實現的高性能分頁解決方案,支持多種數據庫的分頁語法,能夠自動識別數據庫類型并生成對應的分頁SQL。 核心概念: 物理分頁:直接在SQL層面進…

企業可商用的conda:「Miniforge」+「conda-forge」

文章目錄一、徹底卸載現有 Anaconda/Miniconda二、安裝 Miniforge(推薦)macOS/Linux檢查Windows檢查三、將通道固定為 conda-forge(嚴格優先)四、驗證是否仍引用 Anaconda 源五、常見問題(FAQ)六、參考命令…

Flutter ExpansionPanel組件(可收縮的列表)

可以展開或者收縮的面板組件,收縮面板組件效果由ExpansionPanelList組件和ExpansionPanel組件共同完成。 ExpansionPanelList屬性說明屬性說明children子元素expansionCallback設置回調事件ExpansionPanel屬性說明headerBuilder收縮的標題body內容isExpanded設置內容…

C/C++ 進階:深入解析 GCC:從源碼到可執行程序的魔法四步曲

引言距離上一篇博客更新已經過去了大概一兩周的時間,而對于 Linux 系統的基本指令以及 Shell 編程的學習其實基本講解完畢,Linux基礎一塊的知識就將告一段落了,如果有細節性的知識,我也會及時分享給各位,作為一名正在攀…

云服務器運行持續強化學習COOM框架的問題

1 環境要求 下載地址:https://github.com/TTomilin/COOM tensorflow 2.11以上 python 3.9以上 tensorflow2.12.0,需要安裝tensorflow-probability0.19 2 修改代碼 COOM/wrappers/reward.py 將 from gym import RewardWrapper修改為 from gymnasium impor…

MyBatis Interceptor 深度解析與應用實踐

MyBatis Interceptor 深度解析與應用實踐 一、MyBatis Interceptor概述 1.1 什么是MyBatis Interceptor MyBatis Interceptor,也稱為MyBatis 插件,是 MyBatis 提供的一種擴展機制,用于在 MyBatis 執行 SQL 的過程中插入自定義邏輯。它類似…

【自動化測試】Web自動化測試 Selenium

🔥個人主頁: 中草藥 🔥專欄:【Java】登神長階 史詩般的Java成神之路 測試分類 了解各種各樣的測試方法分類,不是為了墨守成規按照既定方法區測試,而是已了解思維為核心,并了解一些專業名詞 根…

2025 電賽 C 題完整通關攻略:從單目標定到 2 cm 測距精度的全流程實戰

摘要 2025 年全國大學生電子設計競賽 C 題要求“僅用一顆固定攝像頭”在 5 s 內完成 100 cm~200 cm 距離、誤差 ≤2 cm 的單目測距,并實時顯示功耗。本文整合國一選手方案、CSDN 高分博文、B 站實測視頻及官方說明,給出從硬件選型→離線標定→在線算法→…

Day 10: Mini-GPT完整手寫實戰 - 從組件組裝到文本生成的端到端實現

Day 10-2: Mini-GPT完整手寫實戰 - 從組件組裝到文本生成的端到端實現 ?? 今日學習目標 掌握GPT架構組裝:將Transformer組件組裝成完整的生成模型 理解生成式預訓練:掌握自回歸語言建模的核心機制 端到端代碼實現:從數據預處理到模型訓練的完整流程 文本生成實戰:訓練Mi…

深入解析Prompt緩存機制:原理、優化與實踐經驗

深入解析Prompt緩存機制:原理、優化與實踐經驗 概述 在大型語言模型應用中,API請求的延遲和成本始終是開發者關注的核心問題。Prompt緩存(Prompt Caching)技術通過智能地復用重復內容,有效減少了API響應時間和運行成本…

CV 醫學影像分類、分割、目標檢測,之【3D肝臟分割】項目拆解

CV 醫學影像分類、分割、目標檢測,之【3D肝臟分割】項目拆解第1行:from posixpath import join第2行:from torch.utils.data import DataLoader第3行:import os第4行:import sys第5行:import random第6行&a…

Mybatis學習筆記(七)

Spring Boot集成 簡要描述:MyBatis-Plus與Spring Boot的深度集成,提供了自動配置、啟動器等特性,大大簡化了配置和使用。 核心概念: 自動配置:基于條件的自動配置機制啟動器:簡化依賴管理的starter配置屬性…

機器人伴侶的智能升級:Deepoc具身智能模型如何重塑成人伴侶體驗

引言:機器人伴侶市場的技術變革需求隨著人工智能技術的飛速發展和人們情感需求的多元化,機器人成人伴侶市場正在經歷前所未有的增長。傳統機器人伴侶已經能夠滿足基礎的交互需求,但在智能化、情感化和個性化方面仍存在明顯不足。這正是深算紀…

metabase基礎使用技巧 (dashboard, filter)

這是metabase系列分享文章的第2部分。本文將介紹metabase的基礎概念和使用介紹 question question是metabase中提供的通過UI化操作就能實現簡單的 快捷 直接的BI查詢。 點擊右側的New -> Question即可創建Question,可以理解為一個格式化的查詢: 這里…

機器人成人伴侶的智能化升級:Deepoc具身模型賦能沉浸式體驗

引言:成人機器人市場的技術革新需求隨著人工智能和機器人技術的快速發展,成人陪伴機器人行業正經歷從簡單機械運動到智能化交互的轉型。據市場研究數據顯示,全球成人機器人市場規模預計將在2026年突破100億美元,年復合增長率保持在…

Go語言企業級權限管理系統設計與實現

最近跟著學長再寫河南師范大學附屬中學圖書館的項目,學長交給了我一個任務,把本項目的權限管理給吃透,然后應用到下一個項目上。 我當然是偷著樂吶,因為讀代碼的時候,總是莫名給我一種公費旅游的感覺。 本來就想去了解…

Java應用快速部署Tomcat指南

將Java應用部署到Apache Tomcat服務器是開發Web應用過程中常見的任務。Tomcat是一個免費且開源的Servlet容器,它為Java應用提供了運行環境。本文將介紹如何準備你的Java應用,并將其部署到Tomcat服務器上。 Java 應用部署 tomcat 的根目錄結構 Tomcat中默認網站根目錄是$CAT…

Java 學習筆記(基礎篇2)

1. 分支結構① if 語句:(1) 雙分支:if (條件) {// 語句體1 } else {// 語句體2 }(2) 多分支if (條件1) {// 語句體1 } else if (條件2) {// 語句體2 } else {// 語句體N }② switch 語句:(1) 語法:如果都不是(default&…

谷歌云代理商:用 AI 啟航,Gemini 重塑旅游酒店行業新體驗

本文由谷歌云谷歌地圖官方授權代理商、高級合作伙伴 CloudAce云一 整理發布。谷歌云谷歌地圖在中國授權代理商名單:Cloud Ace云一,全球20分公司,國內核心城市多個據點,谷歌云與谷歌地圖代理商、頂級合作伙伴(Premier P…

springboot+vue實現通過poi完成excel

前端1、按鈕<el-buttontype"text"size"mini"click"handleExport">導出</el-button>2、方法//導出async handleExport() {if (!this.activityId) {this.$message.warning(活動ID不存在);return;}try {this.loading true;const res …