【Linux手冊】進程的狀態:從創建到消亡的“生命百態”

目錄

前言

操作系統進程狀態

運行狀態

阻塞狀態

掛起狀態

Linux中具體的進程狀態

R(running)運行狀態

S(sleeping)阻塞狀態

D(disk sleep)磁盤休眠狀態

T(stopped)和t(tracing stop)

X(dead)終止狀態

Z(zombie)僵尸狀態

僵尸進程的危害


前言

我們在運行可執行程序形成進程后,操作系統要對多個進程進行管理,根據進程的狀態對進程分類,不同類型的進程有不同的處理方案,下面將對不同進程的特點進行介紹。

操作系統進程狀態

以上是進程狀態之間的相互轉化過程,下面將詳細圍繞三個狀態展開:運行狀態,阻塞狀態,掛起狀態。

運行狀態

?運行狀態就是正在運行的進程,很好理解;

問題是:CPU只有一個,但是進程有多個,可能多個進程都處于運行狀態,操作系統是如何平衡這些進程的,如何保證這些進程都能夠持續運行???

有多個進程都要運行,那就意味著在一段時間內每個進程都要得到執行。當然因為CPU只有一個所以在一個時間點只能對運行一個進程。?

在操作系統中有一個概念叫做運行隊列,所有處于運行狀態進程的PCB數據結構體對象都在這個隊列中排隊,一個個的運行;排隊的先后順序是根據進程的優先級決定的

在進程中有一個時間片的概念,時間片可以保證每個進程在CPU中運算,處理的時間差不多,是每個進程都有機會執行。

CPU對進程依次進行處理,那為什么我并沒有感覺到我打開的程序有卡頓的情況???這是初學者經常會出現的誤區,這是因為CPU計算處理的速度太快了,人根本感知不到。

阻塞狀態

阻塞狀態很形象,不明事宜進程被阻塞了,不能再繼續運行。出現阻塞狀態有很多原因通常是因為:?I/O 操作完成、等待用戶輸入、等待資源分配。就是進程處于等待狀態,沒有處在運行隊列中,即使CPU空閑也無法對這樣的進程進行計算,處理。

處于阻塞狀態的進程存放在哪里???

操作系統對與軟硬件管理的基礎是:先描述,再組織。操作系統也要對硬件進行管理,所以操作系統中理應存在描述硬件信息的結構體對象。所以處于阻塞狀態的進程放在對應外設(等待從那里讀取數據)結構體對象的等待隊列中。

掛起狀態

常見的掛起狀態是阻塞掛起狀態。

阻塞掛起狀態:當操作系統中有多個進程在同時加載,計算機中內存不足時,操作系統就會將一些處于阻塞狀態的進程的信息,數據,PCB結構體對象都置換到外設(硬盤)中去,來使得計算機中空出一些內存繼續進行運算,當一些進程執行完后釋放空間又夠了,再將數據從外設加載到內存中讓進程繼續執行。信息被拷貝到外設的進程就稱為處于掛起狀態的進程。


Linux中具體的進程狀態

上面介紹了操作系統中進程狀態的總體劃分,下面以Linux為例詳細介紹以下Linux下的進程狀態。

*
*The task state array is a strange "bitmap" of
*reasons to sleep. Thus "running" is zero, and
*you can test for combinations of others with
*simple bit tests.
*/
static const char *const task_state_array[] = {
"R (running)", /*0 */
"S (sleeping)", /*1 */
"D (disk sleep)", /*2 */
"T (stopped)", /*4 */
"t (tracing stop)", /*8 */
"X (dead)", /*16 */
"Z (zombie)", /*32 */
}

以上是Linux內核中定義的進程狀態有7種:R(running)運行狀態,S(sleeping)阻塞狀態或淺度睡眠,D(disk sleep)深度睡眠,T(stopped)和t(tracing stop)暫停狀態,X(dead)死亡狀態,Z(zombie)僵尸狀態。下面對這7種進程狀態特點進行一一解釋。

R(running)運行狀態

依舊是將處于運行狀態的進程放入到運行隊列中進行調用,與前面說的一樣沒有特別之處。

S(sleeping)阻塞狀態

也叫淺度睡眠狀態,等待一些外設或I/O,用戶指令......無法繼續向后執行下去。

在上面談到掛起狀態:當內存不足時,操作系統會將一些進程的代碼和數據以及PCB對象從內存置換到外設來空出內存供其他進程使用,被掛起的進程通常是處于阻塞狀態的進程。

但是如果被掛起的進程正在等待磁盤信息的寫入,等著磁盤告訴它是否寫入成功的時候,突然該進程被掛起了,那磁盤內容是否寫入成功就沒人知道了,那數據如果沒有寫入成功還不知道,數據不久丟失了嗎???

使得確實是這樣的,所以操作系統有新增了一個狀態D(disk sleep);

D(disk sleep)磁盤休眠狀態

將正在等待磁盤寫入或高I/O時才會出現,處于這種狀態的進程不能被進程殺掉或掛起。

D狀態的時間很短,一般在查進程狀態時一般看不到這種狀態,如果看到了說明磁盤現在寫入的壓力很大,很有可能操作系統快掛了。

T(stopped)和t(tracing stop)

T(stopped)和t(tracing stop)兩個都表示暫停狀態,只不過暫停的原因是不一樣的。此處將其看作一樣的。

暫停狀態和阻塞狀態有什么區別呢???他們不都是停止運行嗎???

其主要區別在于暫停的原因是什么;阻塞狀態的進程是在等待資源就緒,而處于暫停狀態的進程是用戶操作的,比如kill -19 +PID讓進程暫停,kill -18?+PID讓進程繼續;還有gdb在進行調試的時候停止在一個斷點上也是處于等待狀態。

X(dead)終止狀態

終止狀態,毫無疑問程序運行結束后的狀態,程序運行結束后會放到垃圾回收隊列里面,等待釋放。

Z(zombie)僵尸狀態

我們知道每一個進程都有父進程,在命令行上打開的可執行程序也有父進程。在打開命令行時操作系統會自動將命令行解釋器加載到內存中形成一個進程,所以當使用命令行打開其他程序時,命令行解釋器就是它們的父進程。

當一個進程在進入終止狀態之前,不會立即進入到垃圾回收隊列中,而是先維護一會進程的屬性狀態即PCB結構體對象,讓與其有關的進程(父進程)知道該進程要被釋放了,很容易理解當一個進程要結束了必須要讓操作系統知道,否則一個進程都結束了,而操作系統不知道,那操作系統還怎么管理進程。處于維護進程狀態,等待子進程獲取其狀態信息的進程就處于僵尸進程,即快要死了,但還沒死。

進程推出前,如果都進程沒有主動獲取子進程的相關信息,子進程就會一直處于Z狀態直到父進程來獲取其進程信息。

那如果父進程先子進程結束,怎么辦???

如果父進程先結束,那么子進程就會稱為孤兒進程,子進程的父進程將變成操作系統,被操作系統領養,操作系統直到關機一直都在。

僵尸進程的危害

  1. 進程推出狀態要一直維護,直到父進程來獲取進程的相關信息;
  2. 父進程一直不來獲取子進程的相關信息,PCB就需要一直維護,也需要一直保持Z狀態;
  3. 如果一直不回收子進程就會導致PCB長時間占用內存,導致內存泄漏。

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

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

相關文章

李沐--動手學深度學習 LSTM

1.從零開始實現LSTM #從零開始實現長短期記憶網絡 import torch from torch import nn from d2l import torch as d2l#加載時光機器數據集 batch_size,num_steps 32,35 train_iter,vocab d2l.load_data_time_machine(batch_size,num_steps)#1.定義和初始化模型參數&#xff…

面經的疑難雜癥

1.介紹一下虛擬地址,虛擬地址是怎么映射到物理地址的? 虛擬地址是指在采用虛擬存儲管理的操作系統中,進程訪問內存時所使用的地址。每個進程都有獨立的虛擬地址空間,虛擬地址通過操作系統和硬件(如MMU,內存…

去噪擴散概率模型(DDPM)全解:從數學基礎到實現細節

一、 概述 在這篇博客文章中,我們將深入探討去噪擴散概率模型(也被稱為 DDPMs,擴散模型,基于得分的生成模型,或簡稱為自動編碼器),這可以說是AIGC最近幾年飛速發展的基石,如果你想做…

【系統分析師】2011年真題:案例分析-答案及詳解

文章目錄 試題1【問題 1】【問題 2】【問題 3】 試題2【問題 1】【問題 2】【問題 3】 試題3【問題 1】【問題 2】【問題 3】 試題4【問題 1】【問題 2】【問題 3】 試題5【問題 1】【問題 2】【問題 3】 試題1 隨著寬帶應用快速發展,用戶要求系統服務提供商提供基…

【unitrix】 1.7 規范化常量類型結構(standardization.rs)

一、源碼 這段代碼實現了一個二進制數字標準化系統,用于將二進制數字類型(B0/B1)轉換為更簡潔的表示形式。 //! 二進制數字標準化模塊 / Binary Number Normalization Module //! //! 提供將二進制數字(B0/B1)標準化為更簡潔表示形式的功能…

NJet Portal 應用門戶管理介紹

nginx向云原生演進,All in OpenNJet! 1. 應用門戶簡介 NJet 應用引擎是基于 Nginx 的面向互聯網和云原生應用提供的運行時組態服務程序,作為底層引擎,NJet 實現了NGINX 云原生功能增強、安全加固和代碼重構,利用動態加…

uni-app學習筆記三十六--分段式選項卡組件的使用

先來看效果: 上圖有3個選項卡(PS:uniapp官方稱之為分段器,我還是習慣叫選項卡),需要實現點擊不同的選項卡時下方切換顯示對應的數據。 下面介紹下實現的過程。 1.在uniapp官方文檔下載并安裝該擴展組件:u…

Qt:Qt桌面程序正常退出注意事項

一般情況下,Qt窗體的創建和顯示命令如下: Main_window main_window; main_window.show(); 主窗體中設置屬性Qt::WA_DeleteOnClose setAttribute(Qt::WA_DeleteOnClose); 則在main.cpp中可以將窗體創建為指針,這樣在退出時可以正確釋放指針…

【arXiv2024】時間序列|TimesFM-ICF:即插即用!時間序列預測新王者!吊打微調!

論文地址:https://arxiv.org/pdf/2410.24087 代碼地址:https://github.com/uctb/TSFM 為了更好地理解時間序列模型的理論與實現,推薦參考UP “ThePPP時間序列” 的教學視頻。該系列內容系統介紹了時間序列相關知識,并提供配套的論…

從0開始學習語言模型--Day02-如何最大化利用硬件

如何利用硬件 這個單元分為內核、并行處理和推理。 內核(Kernels) 我們說的內核一般指的就是GPU,這是我們用于計算的地方,一般說的計算資源就指的是GPU的大小。我們模型所用的數據和參數一般存儲在內存里,假設把內存…

ElasticSearch配置詳解:設置內存鎖定的好處

什么是內存鎖定 "bootstrap": {"memory_lock": "true" }內存鎖定是指將Elasticsearch的JVM堆內存鎖定在物理內存中,防止操作系統將其交換(swap)到磁盤。 內存交換是操作系統的虛擬內存管理機制,當…

成功解決 ValueError: Unable to find resource t64.exe in package pip._vendor.distlib

解決問題 我們在本地的命令行中運行指令"python -m pip install --upgrade pip"的時候,報了如下的錯誤: 解決思路 我們需要重新安裝一下pip。 解決方法 步驟1: 通過執行下面的指令刪除本地的pip: python -m pip uninstall pip…

倉庫物資出入庫管理系統源碼+uniapp小程序

一款基于ThinkPHPuniapp開發的倉庫物資出入庫管理系統,適用于單位內部物資采購、發放管理的庫存管理系統。提供全部無加密源碼,支持私有化部署。 更新日志: 新增 基于UNIAPP開發的手機端,適配微信小程序 新增 字典管理 新增頁面…

基于機器學習的逐巷充填開采巖層運動地表沉降預測

基于機器學習的逐巷充填開采巖層運動地表沉降預測 1. 項目概述 本報告詳細介紹了使用Python和機器學習技術預測逐巷充填開采過程中地表沉降的方法。通過分析地質參數、開采參數和充填參數,構建預測模型評估地表沉降風險。 # 導入必要的庫 import numpy as np import pandas…

MotleyCrew ——拋棄dify、coze,手動搭建多agent工作流

1. MotleyCrew 核心組件 - 協調器: Crew MotleyCrew 的核心是一個 “Crew” 對象,即多代理系統的指揮者。Crew 持有一個全局的知識圖譜(使用 Kuzu 圖數據庫),用于記錄所有任務、任務單元和其執行狀態。 Cr…

掌握這些 Python 函數,讓你的代碼更簡潔優雅

在 Python 編程世界里,代碼的簡潔性與可讀性至關重要。簡潔優雅的代碼不僅便于自己后期維護,也能讓其他開發者快速理解邏輯。而 Python 豐富的內置函數和一些實用的第三方庫函數,就是實現這一目標的有力武器。接下來,就為大家介紹…

簡說ping、telnet、netcat

簡說 ping 和 telnet 命令的作用、用法和區別,方便理解它們在網絡診斷中的用途。 🌐 ping 命令 ? 作用: ping 用于檢測網絡連通性。它通過向目標主機發送 ICMP Echo 請求 并等待回應,從而判斷目標主機是否可達,并測…

基于STM32的超聲波模擬雷達設計

一、雷達概述 雷達(Radio Detection and Ranging,無線電探測與測距)是一種利用電磁波探測目標位置、速度等信息的主動式傳感器系統。其基本原理是發射電磁波并接收目標反射的回波,通過分析回波的時間差、頻率變化等參數&#xff0…

飛書多維表格利用 Amazon Bedrock AI 能力賦能業務

背景 飛書多維表格是一款功能強大的在線數據管理與協作工具。它打破傳統表格局限,將電子表格與數據庫特性融合,支持看板、甘特圖、表單等多種視圖自由切換,可根據項目進度、任務管理等不同場景靈活展示數據。其豐富的字段類型能精準適配各類…

表格對比工具推薦,快速比對Excel文件

軟件介紹 今天為大家推薦一款專為Excel用戶設計的表格比較工具,簡單易用,零基礎也能快速掌握。 輕量高效的辦公助手 Excel比較工具體積僅為11MB,占用空間小,運行流暢,適合各類電腦配置使用。 簡潔明了的操作界面 軟…