進程生命周期

進程生命周期

Linux是多任務操作系統,系統中的每個進程能夠分時復用CPU時間片,通過有效的進程調度策略實現多任務并行執行。進程在被CPU調度運行,等待CPU資源分配以及等待外部事件時會處于不同的狀態。進程狀態如下:

  • 創建狀態:創建新進程;
  • 就緒狀態:進程獲取可以運作所有資源及準備相關條件;
  • 執行狀態:進程正在CPU中執行操作;
  • 阻塞狀態:進程因等待某些資源而被跳出CPU;
  • 終止狀態:進程消亡;
[新建][就緒] ? [運行][終止]↑       ↓└── [阻塞] ←─┘

linux內核中進程狀態

內核進程狀態定義如下。

/* Used in tsk->state: */
#define TASK_RUNNING			0x0000 // 運行或就緒
#define TASK_INTERRUPTIBLE		0x0001 // 可中斷睡眠,也叫輕度睡眠,可被信號或資源就緒喚醒
#define TASK_UNINTERRUPTIBLE		0x0002 // 深度睡眠,僅由資源就緒喚醒(不可被信號中斷)
#define TASK_KILLABLE           (TASK_WAKEKILL | TASK_UNINTERRUPTIBLE) // 0x0102,中度睡眠,能被kill信號打斷
#define __TASK_STOPPED			0x0004
#define __TASK_TRACED			0x0008
/* Used in tsk->exit_state: */
#define EXIT_DEAD			0x0010 // 進程完全終止(資源已回收)
#define EXIT_ZOMBIE			0x0020 // 進程已終止,但父進程未回收其資源(wait() 未調用)
#define EXIT_TRACE			(EXIT_ZOMBIE | EXIT_DEAD)

進程狀態查詢方法

  • **<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">ps</font>**/**<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">top</font>**
  • **<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">cat /proc/<PID>/status</font>**

<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">ps</font>/<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">top</font> 顯示的進程狀態

符號**<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">ps</font>**/**<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">top</font>**狀態對應內核狀態場景描述
RRunning**<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">TASK_RUNNING</font>**進程正在運行或就緒(等待CPU調度)。
SSleeping**<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">TASK_INTERRUPTIBLE</font>**可中斷睡眠
DUninterruptible**<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">TASK_UNINTERRUPTIBLE</font>**不可中斷睡眠
TStopped**<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">__TASK_STOPPED</font>**進程被暫停(如收到**<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">SIGSTOP</font>****<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">SIGTSTP</font>**信號)。
tTraced**<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">__TASK_TRACED</font>**進程被調試器(如gdb)追蹤(通常在斷點處暫停)。
ZZombie**<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">EXIT_ZOMBIE</font>**僵尸進程(已終止但父進程未回收資源)。
XDead**<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">EXIT_DEAD</font>**
(極少在**<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">ps</font>**中看到)
進程完全終止(資源已回收,通常瞬間狀態)。
IIdle(內核線程的特殊標記)內核空閑線程。

僵尸進程

進程已終止執行,但其父進程尚未調用 **wait()** 系統調用來回收它的資源(主要是退出狀態信息)。 這樣的進程稱為僵尸進程

進程狀態為 Z(Zombie)。

進程已經執行完成,但是沒有釋放pid,task_struct等資源。

系統pid資源是有限的,大量僵尸進程會耗盡系統pid。

下面是僵尸進程測試代碼。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>int main() {pid_t pid = fork();if (pid == 0) {printf("子進程退出\n");exit(0);  // 子進程終止} else {sleep(60);  // 父進程沒有調用 wait()}return 0;
}

結果如下。

root@VM:~$ ps aux | grep zom
root    10106  0.0  0.0   2364   576 pts/4    S+   17:20   0:00 ./zombie_process_test
root    10107  0.0  0.0      0     0 pts/4    Z+   17:20   0:00 [zombie_process_] <defunct>

孤兒進程

進程的父進程已經提前退出,而該進程仍然在運行。 這種進程稱為孤兒進程。

孤兒進程執行完后會被init進程回收。一般不會產生危害。

下面是孤兒進城的測試代碼。

#include <stdio.h>
#include <unistd.h>int main() {pid_t pid = fork();if (pid == 0) {sleep(60); // 子進程繼續運行printf("我是子進程,父進程已經退出\n");} else {printf("父進程退出\n");exit(0); // 父進程終止}return 0;
}

參考資料

  1. Professional Linux Kernel Architecture,Wolfgang Mauerer
  2. Linux內核深度解析,余華兵
  3. Linux設備驅動開發詳解,宋寶華
  4. linux kernel 4.12

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

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

相關文章

文字轉圖片的字符畫生成工具

軟件介紹 今天要介紹的這款軟件可以將文字轉換成圖片的排列形式&#xff0c;非常適合需要將文字圖形化的場景&#xff0c;建議有需要的朋友收藏。 軟件名稱與用途 這款軟件名為《字符畫大師》&#xff0c;是一款在網吧等場所非常流行的聊天輔助工具&#xff0c;其主要功能就…

歷年南京大學計算機保研上機真題

2025南京大學計算機保研上機真題 2024南京大學計算機保研上機真題 2023南京大學計算機保研上機真題 在線測評鏈接&#xff1a;https://pgcode.cn/school Count Number of Binary Strings 題目描述 Given a positive integer n n n ( 3 ≤ n ≤ 90 3 \leq n \leq 90 3≤n≤…

王樹森推薦系統公開課 排序06:粗排模型

shared bottom 表示神經網絡被所有特征共享。精排模型主要開銷在神經網絡&#xff0c;神經網絡很大且很復雜。 每做一次推薦&#xff0c;用戶塔只做一次推理。物品塔存放入向量數據庫。 后期融合模型常用于召回&#xff0c;前期融合模型常用于精排。 物品塔短時間內比較穩…

VSCode的下載與安裝(2025親測有效)

目錄 0 前言1 下載2 安裝3 后記 0 前言 丫的&#xff0c;誰懂啊&#xff0c;嘗試了各種辦法不行的話&#xff0c;我就不得不拿出我的最后絕招了&#xff0c;卸載&#xff0c;重新安裝&#xff0c;我經常要重新安裝&#xff0c;所以自己寫了一個博客&#xff0c;給自己&#xf…

端午節互動網站

端午節互動網站 項目介紹 這是一個基于 Vue 3 Vite 開發的端午節主題互動網站&#xff0c;旨在通過有趣的交互方式展示中國傳統端午節文化。網站包含三個主要功能模塊&#xff1a;端午節介紹、互動包粽子游戲和龍舟競賽游戲。 預覽網站&#xff1a;https://duanwujiekuaile…

Python+requests+pytest接口自動化測試框架的搭建(全)

&#x1f345; 點擊文末小卡片&#xff0c;免費獲取軟件測試全套資料&#xff0c;資料在手&#xff0c;漲薪更快 框架的設計思路 首先要明確進行接口自動化需要的步驟&#xff0c;如下圖所示&#xff1a; 然后逐步拆解需要完成的工作&#xff1a; 1&#xff09;了解分析需求&…

OpenCV視覺圖片調整:從基礎到實戰的技術指南

引言:數字圖像處理的現代意義與OpenCV深度應用 在人工智能與計算機視覺蓬勃發展的今天,圖像處理技術已成為多個高科技領域的核心支撐。根據市場研究機構Grand View Research的數據,全球計算機視覺市場規模預計將從2022年的125億美元增長到2030年的253億美元,年復合增長率達…

JS手寫代碼篇---手寫節流函數

8、節流函數 什么是節流函數&#xff1f; 指規定一個單位時間&#xff0c;在這個單位時間內&#xff0c;只能有一次觸發事件的回調函數執行&#xff0c;如果在同一個單位時間內某事件被觸發多次&#xff0c;只有一次能生效。 與防抖函數有什么區別&#xff1f; 防抖函數是延…

2025年05月30日Github流行趨勢

項目名稱&#xff1a;agenticSeek 項目地址url&#xff1a;https://github.com/Fosowl/agenticSeek項目語言&#xff1a;Python歷史star數&#xff1a;13040今日star數&#xff1a;1864項目維護者&#xff1a;Fosowl, steveh8758, klimentij, ganeshnikhil, apps/copilot-pull-…

node_modules包下載不下來

如果項目里面的package-lock.json有resolved &#xff0c;就指向了包的下載來源&#xff0c;如果這個網址掛了&#xff0c;那npm i 就會一直卡著。而且&#xff0c;在終端去修改 npm的鏡像是沒有用的 解決辦法是:把項目里面的 lock文件 .npmrc都刪了 然后重新下載就可以了

OramaCore 是您 AI 項目、答案引擎、副駕駛和搜索所需的 AI 運行時。它包括一個成熟的全文搜索引擎、矢量數據庫、LLM界面和更多實用程序

一、軟件介紹 文末提供程序和源碼下載 OramaCore 是您的項目、答案引擎、副駕駛和搜索所需的 AI 運行時。 它包括一個成熟的全文搜索引擎、矢量數據庫、LLM具有行動計劃和推理功能的接口、用于根據數據編寫和運行您自己的自定義代理的 JavaScript 運行時&#xff0c;以及更多…

小白成長之路-計算機網絡(四)

文章目錄 前言一、網絡連接查看1.netstat2.ss3.bond綁定3.1準備好這三個文件3.2添加bond配置文件3.3關閉網絡圖形化服務3.4重啟 4.Linux下的抓包工具Wireshark 5、web壓力測試工具6、路由追蹤命令 二、[練習題](https://blog.csdn.net/m0_70730767/article/details/148262716?…

CppCon 2014 學習:Lock-Free Programming

你這段文字講的是“為什么要使用無鎖&#xff08;Lock-Free&#xff09;代碼”&#xff0c;我幫你總結并解釋一下&#xff1a; 為什么選擇無鎖代碼&#xff1f; 并發性和可擴展性&#xff08;Concurrency and scalability&#xff09; 無鎖算法允許多個線程同時操作共享數據&a…

Proteus尋找元器件(常見)

匯總&#xff1a; 1 主控芯片 STM32系列&#xff08;32位&#xff09; AT89C51&#xff08;51系列&#xff09; 2顯示模塊 OLED 3 按鍵 Button 4 電阻電容 Res&#xff08;電阻&#xff09; Cap&#xff08;電容&#xff09; 5 驅動模塊 L298N&#xff08;電機驅動芯片&am…

vue+threeJs 繪制3D圓形

嗨&#xff0c;我是小路。今天主要和大家分享的主題是“vuethreeJs 繪制圓形”。 今天找到一個用three.js繪制圖形的項目&#xff0c;主要是用來繪制各種形狀。 項目案例示意圖 1.THREE.ShapeGeometry 定義&#xff1a;是 Three.js 中用于從 2D 路徑形狀&#xff08…

macOS燒錄stm32程序初步成功

完整總結&#xff1a;STM32H7 項目編譯與燒錄流程&#xff08;macOS OpenOCD/GDB&#xff09; 1?? 編譯工程 在項目目錄下執行 make&#xff0c;生成 ELF 文件&#xff08;如 Blink.elf&#xff09;&#xff1a; cd /Users/code/Stm32code/Blink/build make clean # 可選…

正則表達式的修飾符

修飾符 修飾符不寫在正則表達式里&#xff0c;標記位于表達式之外 /正則表達式/修飾符gglobal - 全局匹配 查找所有的匹配項。 i i (ignore case) - 忽略大小寫 示例&#xff1a;/abc/i 可以匹配 "abc", "Abc", "ABC" 等

JS浮點數精度問題

在JavaScript開發中&#xff0c;浮點數精度問題是一個常見的陷阱。本文將深入探討JavaScript中浮點數精度問題的原因、影響以及解決方案。 一、浮點數精度常見問題 &#xff08;一&#xff09;加法運算 console.log(0.1 0.2); // 0.30000000000000004 console.log(0.7 0.1…

本地Markdown開源知識庫選型指南

本地Markdown開源知識庫選型指南 以下是幾款優秀的本地Markdown開源知識庫解決方案&#xff0c;適合不同需求場景&#xff1a; 1. Obsidian (非完全開源但免費) 特點&#xff1a;基于Markdown的本地優先知識管理&#xff0c;豐富的插件生態優勢&#xff1a;雙向鏈接、圖形視…

蘇州SAP代理公司排名:工業園區企業推薦的服務商

目錄 一、SAP實施商選擇標準體系 1、行業經驗維度 2、實施方法論維度 3、資質認證維度 4、團隊實力維度 二、SAP蘇州實施商工博科技 1、SAP雙重認證&#xff0c;高等院校支持 2、以SAP ERP為核心&#xff0c;助力企業數字化轉型 三、蘇州使用SAP的企業 蘇州是中國工業…