Linux 進程概念(下)

目錄

前言

4.進程狀態

一.普遍的操作系統層面上宏觀概念:

二.具體的Linux操作系統的狀態:

5.進程優先級(了解)

6.其他概念

進程切換


前言

? 本篇是接著上一篇的內容繼續往下了解進程相關的一些概念!

4.進程狀態

運行 新建 就緒 掛起 阻塞 等待 停止 掛機 死亡......

[^] ?進程這么多狀態本質都是用來滿足不同的運行場景的?

一.普遍的操作系統層面上宏觀概念:

image-20250421141807429

1.一個cpu對應一個運行隊列

2.讓進程入隊列本質就是將該進程的task_struct結構體對象放入運行隊列中

3.狀態是進程內部的屬性,存于描述進程的task_struct中(在該進程對應的PCB中存放),這個狀態可以理解成整數表示(比如:1表示運行狀態,2表示停止狀態......),這個整數是幾就意味著這個進程的狀態是幾

4.運行狀態:進程PCB在運行隊列中就是運行狀態,不是說這個進程正在運行才是運行狀態

5.阻塞狀態:進程并不是只會等待(占用)cpu資源,也可能隨時隨地需要外設資源,所以我們的所有外都設有一個wait隊列,當這個進程需要外設資源但這個外設正在工作時,cpu就把這個進程對應的task_struct對象放到這個外設的隊列中同時把這個進程的狀態修改為阻塞狀態(都是對task_struct對象進行放到不同的隊列中)

當這個外設空閑下來了,就通知操作系統將這個進程PCB從阻塞隊列拉出來改為運行狀態,然后放入cpu運行隊列中

6.所謂的進程不同的狀態,本質是進程在不同的隊列當中等待某種資源(比如:進程等待外設時稱其為阻塞狀態)

7.掛起狀態:

阻塞不一定掛起,掛起一定阻塞

image-20250422092222189

總結:上面解釋了什么叫做運行,什么叫做阻塞,什么叫做掛起

二.具體的Linux操作系統的狀態:

通過查看進程指令:ps ajx | grep 進程名來查看狀態

image-20250422101537410

1.S表示淺度睡眠,可以被終止,是阻塞狀態的一種,一般如果進程要使用外設的情況下基本狀態都會是S

比如:如果代碼中有printf要訪問顯示器,這個進程在默認情況下大概率是S

image-20250422101833330

D表示深度睡眠(面試不重要,但對于我們理解Linux比較重要)

在該狀態下的進程,無法被操作系統殺掉終止,只能通過斷電或者進程自己醒來才能結束該狀態

(在高IO的情況下才有可能看到D狀態的進程)

2.R表示運行狀態

image-20250422102056700

當在運行狀態時,使用命令:kill -19 進程id,進程會進入暫停狀態

3.T表示暫停,暫停也算是阻塞狀態的一種

image-20250422102507205

使用指令:kill -18 進程id,進程會從暫停回到運行狀態

image-20250422102909682

[^] ?(注意R后面的+號不見了)?

關于后面的+號:

在后面有+號時,當我們在shell命令下使用其他命令進程還是在跑并且無法對指令做出回應(shell命令行無法獲取命令行解析了),只有按ctrl+c才能終止,我們把這種進程叫做前臺進程

在后面沒有+號后,我們在shell命令下使用指令會有回應(可以獲取命令行解析),但是此時在命令行按ctrl+c也無法結束進程,進程始終在跑,我們把這種進程叫做后臺進程

4.在Linux下,因為用戶不需要知道進程是否在掛起狀態,因為這是操作系統內部做管理自己把它交換到磁盤上,和用戶其實沒關系也對用戶而言沒啥意義,所以Linux下看不到掛起的狀態

5.t狀態:表示的是當前進程正在被追蹤時的暫停,也是一種阻塞狀態

比如在gdb調試進程時打上斷點運行后,該進程就處于t狀態

image-20250422120503794

image-20250422120359563

6.Z狀態:進程退出時,不能立即釋放該進程對應的資源,需要保存一段時間,讓父進程或者操作系統來進行讀取,進程退出了,但是沒有被回收,此時我們把這個進程叫做僵尸進程,Z狀態(僵尸狀態) !僵尸狀態是一種需要解決的問題,不回收僵尸進程會造成內存泄漏,我們之后才能解決

我們這里通過創建子進程,讓父進程不要退出并且什么都不做,讓子進程正常退出,來讓此時這個子進程變成僵尸狀態

image-20250422165552395

image-20250422165420363

此時我們把子進程終止了,但父進程還在,子進程此時就是僵尸狀態

子進程的名字也改為[myprocess] <defunct> (adj.失效的,不再存在的,n.死者,死人)

image-20250422165702522

Linux下各狀態變化圖:

除此之外還有一種特殊的進程:

孤兒進程:父進程先退出,此時該子進程被操作系統領養(1號進程)

1.這種現象一定存在

2.如果操作系統不領養,那么子進程退出的時候,對應的僵尸進程便無人可以進行回收了

3.如果是由前臺進程創建的子進程,如果孤兒了,就會自動變成后臺進程

5.進程優先級(了解)

1.什么叫做優先級?

權限和優先級的區別:

權限是能做還是不能做的問題

優先級則是能做,但是先做還是后做的問題

2.為什么會存在優先級?

答:因為資源太少了

3.Linux優先級特點(很快)

a.優先級本質就是pcb里面的一個整數數字(也可能是幾個)

b.最終優先級=老的優先級(linux下為80) + nice(Linux支持進程運行中進行優先級的調整,通過更改nice值完成調整)

image-20250423095704642

[^] ?nice值默認為0,PRI為優先級,越小優先級越高?

使用top命令更改nice

進入top后按r,輸入進程id,再輸入更改的nice值 nice范圍[-20,19]

那么優先級的范圍: [60,99]

image-20250423101620281

image-20250423101751597

6.其他概念

進程切換

cpu工作:1.取指令 2.分析指令 3.執行指令

1.當我們程序在運行的時候,一定會產生非常多的臨時數據,這些數據屬于當前進程,cpu內部雖然只有一套寄存器硬件,但是寄存器里面保存的數據是屬于當前進程的(在任何時刻,cpu里面的寄存器里面的數據看起來是在寄存器上,但實際上是只屬于當前運行的進程的,寄存器被所有進程共享,寄存器內的數據是每個進程各自私有的——上下文數據)

寄存器硬件 != 寄存器內的數據

2.進程在運行的時候占有cpu,但進程不是一直占有cpu直到該進程結束,因為進程在運行的時候都有自己的時間片

3.時間片結束后該進程不占有cpu時,需要先保留該進程在cpu內的在寄存器中存儲的數據(注意不是寄存器),這個操作為上下文保護;下一個進程的時間片開始,下個進程開始占有cpu時,要先恢復在寄存器中存儲的數據,該操作為上下文恢復;完成以上操作就記為一次進程切換

進程在切換的時要進行進程的上下文保護

進程在恢復運行時要進行上下文的恢復

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

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

相關文章

使用java實現word轉pdf,html以及rtf轉word,pdf,html

word,rtf的轉換有以下方案&#xff0c;想要免費最靠譜的是LibreOffice方案, LibreOffice 是一款 免費、開源、跨平臺 的辦公軟件套件&#xff0c;旨在為用戶提供高效、全面的辦公工具&#xff0c;適用于個人、企業和教育機構。它支持多種操作系統&#xff08;Windows、macOS、…

IP證書的作用與申請全解析:從安全驗證到部署實踐

在網絡安全領域&#xff0c;IP證書&#xff08;IP SSL證書&#xff09;作為傳統域名SSL證書的補充方案&#xff0c;專為公網IP地址提供HTTPS加密與身份驗證服務。本文將從技術原理、應用場景、申請流程及部署要點四個維度&#xff0c;系統解析IP證書的核心價值與操作指南。 一…

GitLab 18.0 正式發布,15.0 將不再受技術支持,須升級【三】

GitLab 是一個全球知名的一體化 DevOps 平臺&#xff0c;很多人都通過私有化部署 GitLab 來進行源代碼托管。極狐GitLab 是 GitLab 在中國的發行版&#xff0c;專門為中國程序員服務。可以一鍵式部署極狐GitLab。 學習極狐GitLab 的相關資料&#xff1a; 極狐GitLab 官網極狐…

超簡單Translation翻譯模型部署

Helsinki-NLP/opus-mt-{en}-{zh}系列翻譯模型可以實現200多種語言翻譯&#xff0c;Helsinki-NLP/opus-mt-en-zh是其中英互譯模型。由于項目需要&#xff0c;在本地進行搭建&#xff0c;并記錄下搭建過程&#xff0c;方便后人。 1. 基本硬件環境 CPU&#xff1a;N年前的 Intel…

Go語言JSON 序列化與反序列化 -《Go語言實戰指南》

JSON&#xff08;JavaScript Object Notation&#xff09;是一種常見的數據交換格式。Go 標準庫提供了 encoding/json 包&#xff0c;用于方便地將結構體與 JSON 之間互轉。 一、序列化&#xff08;Marshal&#xff09; 將 Go 中的數據結構&#xff08;如結構體、map、slice 等…

免費PDF工具-PDF24V9.16.0【win7專用版】

【百度】https://pan.baidu.com/s/1H7kvHudG5JTfxHg-eu2grA?pwd8euh 提取碼: 8euh 【夸克】https://pan.quark.cn/s/92080b2e1f4c 【123】https://www.123912.com/s/0yvtTd-XAHjv https://creator.pdf24.org/listVersions.php

網絡 :序列和反序列化

網絡 &#xff1a;序列和反序列化 &#xff08;一&#xff09;序列和反序列 概念&#xff08;二&#xff09;實例1. 封裝socket 接口2. 制定協議&#xff08;用于實現序列和反序列化&#xff09;3. 計算(實現計算器功能)4. 服務器(將上面所有的類功能調用起來)5. 服務端6.客戶端…

LiveQing 視頻點播流媒體 RTMP 推流服務功能:搭建 RTMP 視頻流媒體服務詳細指南

LiveQing視頻點播流媒體RTMP推流服務功能&#xff1a;搭建RTMP視頻流媒體服務詳細指南 一、流媒體服務搭建二、推流工具準備三、創建鑒權直播間四、獲取推流地址五、配置OBS推流六、推流及播放七、獲取播放地址7.1 頁面查看視頻源地址7.2 接口查詢 八、相關問題解決8.1 大疆無人…

UE5 Niagara 如何讓四元數進行旋轉

Axis Angle中&#xff0c;X,Y,Z分別為旋轉的軸向&#xff0c;W為旋轉的角度&#xff0c;在這里旋轉角度不需要除以2&#xff0c;因為里面已經除了&#xff0c;再將計算好的四元數與要進行旋轉的四元數進行相乘&#xff0c;結果就是按照原來的角度繞著某一軸向旋轉了某一角度

【微服務】SpringBoot 對接飛書審批流程使用詳解

目錄 一、前言 二、前置準備 2.1 開通企業飛書賬戶 2.2 確保賬戶具備多維表操作權限 2.3 獲取飛書開放平臺文檔 2.4 創建應用 2.5 發布應用 2.6 應用添加操作權限 2.7 獲取SDK 三、審批流程對接過程 3.1 配置流程審批定義(流程審批模型) 3.2 自定義應用添加審批AP…

主鍵與唯一鍵詳解:概念、區別與面試要點

主鍵與唯一鍵詳解:概念、區別與面試要點 一、核心概念解析 1.1 主鍵(Primary Key) 主鍵是數據庫表中用于唯一標識每一行記錄的列或列組合,具有以下核心特性: 唯一性:主鍵值在整個表中必須唯一,不允許重復非空性:主鍵列不允許包含NULL值不可變性:主鍵值一旦確立,原則…

前端面試準備-1

1.NodeJS的優缺點 優點&#xff1a;   高并發&#xff08;最重要的優點&#xff09;   適合I/O密集型應用 缺點&#xff1a;   不適合CPU密集型應用&#xff1b;CPU密集型應用給Node帶來的挑戰主要是&#xff1a;由于JavaScript單線程的原因&#xff0c;如果有長時間運行的…

GO并發過高導致程序崩潰如何解決

#作者&#xff1a;曹付江 文章目錄 1.并發過高導致程序崩潰2. 如何解決2.1 利用 channel 的緩存區2.2 利用第三方庫 3 調整系統資源的上限3.1 ulimit3.2 虛擬內存(virtual memory) 1.并發過高導致程序崩潰 看一個非常簡單的例子&#xff1a; func main() {var wg sync.WaitG…

Linux -- gdb/cgdb的認識和使用

預備知識 程序的發布?式有兩種&#xff0c; debug 模式和 release 模式&#xff0c; Linux gcc/g 出來的?進制程 序&#xff0c;默認是 release 模式。 要使?gdb調試&#xff0c;必須在源代碼?成?進制程序的時候, 加上 -g 選項&#xff0c;如果沒有添加&#x…

window 顯示驅動開發-Direct3D 呈現性能改進(四)

調用資源創建、映射和取消映射函數的行為更改 對于 WDDM 1.3 及更高版本驅動程序實現的這些函數&#xff0c;Direct3D 運行時為映射默認方案提供一組受限的輸入值。 這些受限值僅適用于支持功能級別 11.1 及更高版本的驅動程序。 CreateResource (D3D11) 函數— 這些輸入 D3…

3.python操作mysql數據庫

前言&#xff1a;在現代應用程序中&#xff0c;數據庫扮演者至關重要的角色。mysql是一個流行的關系型數據庫管理系統&#xff0c;廣泛應用于各種規模的應用中。在pytho中&#xff0c;我們可以通過連接庫與mysql數據庫進行交互&#xff0c;實現數據的增刪改查操作。與此同時&am…

day023-網絡基礎與OSI七層模型

文章目錄 1. 網絡基礎知識點1.1 網絡中的單位1.2 查看實時網速&#xff1a;iftop1.3 交換機、路由器 2. 路由表2.1 查看路由表的命令2.2 路由追蹤命令 3. 通用網站網絡架構4. 局域網上網原理-NAT5. 虛擬機上網原理6. 虛擬機的網絡模式6.1 NAT模式6.2 橋接模式6.3 僅主機模式 7.…

DeepSeek智能對話助手項目

目錄&#xff1a; 1、效果圖2、實現代碼3、溫度和TopK的作用對比 1、效果圖 2、實現代碼 # import gradio as gr# def reverse_text(text): # return text[::-1]# demogr.Interface(fnreverse_text,inputs"text",outputs"text")# demo.launch(share&q…

視覺中國:鏡頭下的中國發展圖景

2025年5月下旬&#xff0c;從北國草原到江南水鄉&#xff0c;從文化遺產到科技創新&#xff0c;中國大地上演著一幕幕生機勃勃的圖景。河北張家口的沙狐幼崽與濕地生態和諧共生&#xff0c;湖北襄陽的茶園雕琢出詩意田園&#xff1b;北京殷商文創的活力、沈陽文物情景劇的創意&…

LabVIEW 中內存釋放相關問題

在LabVIEW 編程領域&#xff0c;內存管理是一個關鍵且復雜的議題。我們常常關注 LabVIEW 如何將內存釋放回操作系統&#xff08;OS&#xff09;&#xff0c;以及是否有方法確保在特定數據結構&#xff08;如隊列、變體屬性、動態數據引用 DVR 等&#xff09;銷毀、刪除或清空后…