進程狀態(Linux)

進程狀態

Linux進程狀態

Linux進程狀態進程描述
R運行狀態
S睡眠狀態
D磁盤休眠狀態
T停止狀態
t被追蹤狀態(調試狀態)
X死亡狀態
Z僵死狀態

其實大致也就可以分為三種運行阻塞掛起

運行狀態

每個cpu里都有一個運行隊列,進程在運行隊列里,不管他是否正在被運行。這種進程就屬于運行狀態,也就是運行態,在Linux系統中就是R狀態。cpu里有一個函數叫調度器,當一個進程要運行的時候,有調度器上傳,cpu既可以運行該進程了。一個進程不是在cpu里一直運行,直到該進程運行完畢。而是運行一段時間,無論你是否運行完畢,都要退出。這個時間叫時間片。假設時間片是10毫秒,每個進程都只能運行10毫秒,然后后下來排隊,其他進程運行。所以,在一段時間內,每個進程都可以運行。這種情況叫并發執行,一個cpu,一段時間內,多個進程都運行了。大量把進程從cpu上拿下來,放上去,就叫進程切換

阻塞狀態

當一個進程為了等待某種資源時,而處于等待狀態的進程就屬于阻塞狀態,一般是放到等待隊列里。比如一個進程需要等待鍵盤設備,操作系統考慮到既然該進程需要依靠其他進程或者數據等才能運行,就不會把它放到運行隊列中。而是會把它放到等待隊列中,直到他需要的進程或者數據等準備好了,才會把該進程放到運行隊列。此時該進程的狀態就是,阻塞狀態。

掛起狀態

還是剛剛,那個情景,該進程需要等待鍵盤外設,可是突然內存資源嚴重不足。操作系統就會把該進程的代碼和數據放到磁盤上,減輕內存壓力,只保留PCB。此時該進程的狀態就是掛起狀態,更準確說是阻塞掛起狀態,因為PCB還是保留在等待隊列中。有些地方會把掛起狀態進行很多分類。其實,都是掛起狀態,記一個就好。當一個進程的PCB保留在內存中,代碼和數據卻在磁盤上,此時該進程就是掛起狀態

接下來我們看看Linux進程狀態的分類

R,運行狀態,一般情況是查不到這個狀態的。因為CPU的運行特別塊,你幾乎察覺不到,是瞬時的。

S和D分別時淺度睡眠和深度睡眠兩種狀態,淺度睡眠可以被喚醒,深度睡眠除了斷電沒有辦法阻止。咱們先不管他是什么深淺睡眠,既然是睡眠狀態,那就表明該進程目前不運行,當這個進程是為了等待某種資源而進入睡眠,那他就是阻塞狀態。但是,如果他就是單純的進入睡眠狀態,不是為了等待某種資源,那他就是普通睡眠狀態。

sleep(1)

使用sleep函數可以使進程進入淺度睡眠

那什么是深度睡眠呢?深度睡眠是指當進程在執行某項重要任務時,不可以突然的終止執行,為了防止資源泄露等問題,給該進程了一種權限,誰也不可以終止該進程,直到該進程運行完畢,即使該進程為了等待硬件的資源,而處于等待隊列里,也不可以終止該進程。比如,io流輸出的時候,向磁盤寫入的時候。注意,操作系統也不可以終止該進程。

T和t兩種狀態分別是停止狀態和被追蹤停止狀態,T狀態可以通過SIGSTOP信號停止進程,通過SIGCONT信號繼續運行。t狀態,一般就是gdb調式的時候,可以任意打斷點,停止進程。

X是死亡狀態,就是進程被殺死時狀態,是瞬時的,一般查不到。Z是僵尸狀態,當一個進程結束運行時,會短暫處于這個狀態,等待父進程回收。如果,該父進程一直不回收,那子進程就一直處于Z狀態,該進程也叫僵尸進程,操作系統會一直維護這個進程,如果僵尸進程過多,就會導致內存資源浪費,內存泄漏,等等

孤兒進程

當一個子進程的父進程提前退出,而子進程卻在運行的時候,此時,該進程就是孤兒進程。因為他沒有父進程回收,這會導致內存泄漏。操作系統為了處理這個麻煩,就會讓1號進程回收該進程,比如bash命令行。

進程的其他概念

競爭性:系統進程數目眾多,而CPU資源只有少量,甚至1個,所以進程之間是具有競爭屬性的。為了高 效完成任務,更合理競爭相關資源,便具有了優先級

獨立性:多進程運行,需要獨享各種資源,多進程運行期間互不干擾

并發:多個進程在1個cpu采取進程切換,在一段時間內,讓多個進程得以推進

進程切換,使用到兩個隊列,當時間片完,一個進程無論是否執行完,都要切換另一個隊列。

并行:多個進程在多個cpu同時進行

cpu里的寄存器

兩個問題:

函數返回值如何獲取?通過寄存器存儲,獲取。

系統如何得知進程執行情況?程序計數器pc,eip記錄進程執行指令的下一行指令地址。本質是寄存器

常見寄存器有:eax,ecx,ebx,edx

關于棧的寄存器有:ebp,esp

指令寄存器:eip

cpu里的寄存器,記錄正在運行的進程數據。我們把這種數據叫做上下文。簡單說就是,上下文就是寄存器記錄的進程相關數據。

當進程退出的時候,需要把他的上下文數據保存并帶走。保存的目的是為了恢復,因為進程再次運行的時候,需要從上次運行的地方繼續運行。

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

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

相關文章

物聯網領域中PHP框架的最佳選擇有哪些?

物聯網(IoT)作為近年來快速發展的技術領域,已經滲透到智能家居、工業自動化、智慧城市等方方面面。作為Web開發中廣泛使用的語言,PHP憑借其易學易用、開發效率高和生態豐富的特點,也在物聯網領域找到了用武之地。 本文…

java反射(詳細教程)

我們平常創建類的實例并調用類中成員需要建立在一個前提下,就是已經知道類名和類中成員的信息,靈活性大大降低。甚至在一些項目中還需要修改源碼來滿足使用條件,大大降低了操作的靈活性。Java 反射(Reflection)是 Java…

消息隊列-初識kafka

優缺點 消息隊列的優點: 實現系統解耦: :::color5 系統解耦解釋 有 MQ 時是 “服務 A 發消息到隊列,其他服務從隊列拿消息,新增服務接隊列就行”;無 MQ 時是 “服務 A 直接調其他服務的接口 / 依賴,新增 / …

實踐《數字圖像處理》之Canny邊緣檢測、霍夫變換與主動二值化處理在短線段清除應用中的實踐

在最近的圖像處理項目中,其中一個環節:圖片中大量短線(不是噪聲),需要在下一步處理前進行清除。在確定具體實現時,碰到了Canny邊緣檢測、霍夫變換與主動二值化處理的辯證使用,相關邏輯從圖片灰度…

vue3與ue5通信-工具類

工具 ue5-simple.js /*** UE5 通信工具* 兩個核心方法:發送消息和接收消息*/// 確保全局對象存在 if (typeof window ! undefined) {window.ue window.ue || {};window.ue.interface window.ue.interface || {}; }/*** 生成 UUID*/ function generateUUID() {retu…

在kotlin中如何使用像java中的static

在 Kotlin 中,沒有直接的 static 關鍵字,但有幾種等效的方式來實現 Java 中靜態成員的功能: 1. 伴生對象 (Companion Object) - 最常用 class MyClass {companion object {// 靜態常量const val STATIC_CONSTANT "constant value"…

如何在 Spring Boot 中指定不同的配置文件?

介紹 Spring Boot 提供了多種方式來管理和加載配置文件,特別是在多環境配置下,比如開發、測試和生產環境。通過指定不同的配置文件,可以靈活地調整應用程序的行為,以適應不同的需求。本文將介紹在 Spring Boot 中如何指定使用不同…

在centOS源碼編譯方式安裝MySQL5.7

一、前言 在生產環境中部署數據庫時,很多人會選擇直接使用 yum/apt 包管理器 安裝 MySQL,這樣簡單快速,但缺點是版本受限,靈活性不足。對于需要指定版本、啟用特定編譯參數或優化的場景,源碼編譯安裝 MySQL 就顯得非常…

探討Hyperband 等主要機器學習調優方法的機制和權衡

本篇文章Master Hyperband — An Efficient Hyperparameter Tuning Method in Machine Learning深入探討了Hyperband這一高效的超參數調優方法。文章的技術亮點在于其結合了多臂老虎機策略和逐次減半算法,能夠在大搜索空間中快速剔除表現不佳的配置,從而…

Mysql:InnoDB 關鍵特性

目錄 一、插入緩沖(Change Buffer)→ 快遞驛站的 “臨時存放區” 二、兩次寫(Double Write)→ 重要文件的 “備份存檔” 三、自適應哈希索引(AHI)→ 圖書館的 “熱門書快捷查找區” 四、異步 IO&#x…

STM32-----SPI

SPI簡介SCK:和I2C中SCL的時鐘線一個作用,都是在高電平拿出數據,在低電平寫數據MOSI:主機輸出從機輸入MISO:主機輸入從機輸出,只有當對應從機的SS為低電平,從機的MISO引腳才能設置推挽輸出,當從機SS為高電平時&#xff…

華為考試:HCIE數通考試難度分析

隨著信息技術的飛速發展,網絡技術已成為支撐各行各業運轉的重要基礎,市場對高水平網絡技術人才的需求持續增長。HCIE作為華為認證體系中的最高級別認證,代表了網絡技術領域的專業頂尖水平。本文將對HCIE數通認證的考試內容、難度及備考策略進…

一些常用的激活函數及繪圖

深度網絡的一些常用激活函數,并通過matplot繪制出來: import matplotlib.pyplot as plt import numpy as npdef relu(x):return np.maximum(0, x)def leaky_relu(x, alpha0.01):return np.where(x > 0, x, alpha * x)def gelu(x):return 0.5 * x * (1…

AE蘋果手機iPhone 17展示動畫片頭模板 App Promo Phone 17 Pro

專為 App 發布會、電商促銷、新品宣傳 打造的 iPhone 17 Pro 動畫展示 AE 模板。 4K 超清分辨率 26 張可替換照片位,無需第三方插件,拖拽即可輸出專業級手機宣傳片。 核心亮點 4K 超清:38402160 分辨率,大屏投放與社媒高清壓縮無…

基于Python的云原生TodoList Demo 項目,驗證云原生核心特性

以下是一個基于 Python 的云原生 TodoList Demo 項目,涵蓋 容器化、Kubernetes 編排、CI/CD、可觀測性、彈性擴縮容 等核心云原生特性,代碼簡潔且附詳細操作指南,適合入門學習。項目概覽 目標:實現一個支持增刪改查(CR…

go 日志的分裝和使用 Zap + lumberjack

自帶的log無法滿足 按大小輪轉 ,按天數清理舊日志 ,自動壓縮 ,限制備份數量 ,防止磁盤寫滿 ,生產環境推薦 等 使用 Zap lumberjack package mainimport ("go.uber.org/zap""go.uber.org/zap/zapcore&q…

【.Net技術棧梳理】01-核心框架與運行時(CLR)

文章目錄1 .NET Runtime(CLR-公共語言運行時)1.1 中間語言 IL1.1.1 從源代碼到通用中間語言(IL)1.1.2 運行時加載:CLR登場1.1.3 核心步驟:即時編譯 (JIT Compilation)1.1.4 執行與內存管理(GC&a…

Claude Code 平替:OpenAI發布 Codex CLI ,GPT-5 國內直接使用

openai推出的命令行編程工具codex已經可以使用最新 GPT-5 模型,擁有可媲美 Claude Code 的 AI 編碼能力。本文將指導你在 Windows 系統上部署原生的 Codex CLI 程序,并接入超低價中轉 API,讓你在國內直接用上超高性價比的 OpenAI Codex CLI 應…

在VS2022的WPF仿真,為什么在XAML實時預覽點擊 ce.xaml頁面控件,卻不會自動跳轉到具體代碼,這樣不方便我修改代碼,

在VS2022的WPF仿真,為什么在XAML實時預覽點擊 WpfApp1\FunctionalModule\08Replace\Replace.xaml頁面控件,卻不會自動跳轉到具體代碼,這樣不方便我修改代碼,

Git Bash 別名

有些常用的指令參數非常多,每次都要輸入好多參數,我們可以使用別名。Linux 系統中很多 shell,包括 bash,sh,zsh,dash 和 korn 等,不管哪種 shell 都會有一個 .bashrc 的隱藏文件,它就…