【Linux進程】僵尸進程與孤兒進程

前言

? ? ? ? 僵尸進程和孤兒進程是Linux中極為重要的兩個種進程狀態, 本文將會圍繞這三個問題: 是什么? 為什么? 如何產生的? 詳細的介紹這兩種進程; 以及一些使用場景.

在這里插入圖片描述

?僵尸進程

?在了解孤兒進程之前, 需要先引入僵尸進程的概念;

?什么是僵尸進程?

僵尸進程: 就是處于僵死狀態的進程;

????????僵死狀態(Zombies)是一個比較特殊的狀態。當進程退出并且父進程, 沒有讀取到子進程退出的返回代碼時就會產生僵死()進程
為什么會產生僵尸進程?

?????????進程 = 進程PCB + 進程的代碼和數據; 進程存在就一定會占用一定的空間;

????????為什么創建進程? 很簡單, 為了讓它幫我們完成某些任務;

????????進程執行完畢之后, 核心任務: 將進程PCB 以及進程的代碼和數據釋放掉;

????????父進程創建子進程, 讓子進程去完成某些任務, 那么父進程可能有需求: 需要知道子進程的任務完成情況;

????????子進程退出時, 會由OS將子進程的退出信息寫入到進程PCB中, 允許進程的代碼和數據被釋放, 但是進程PCB不會立即釋放, 要讓父進程知道 子進程退出的信息, 得知子進程退出的原因(正常退出或者異常退出);

? ? ? ? ?當一個進程退出了, 代碼和數據已經被釋放, 只要PCB中的退出信息還沒有被 OS或父進程讀取到, OS就必須維護這-退出進程的PCB, 此時的進程狀態就是Z狀態, 也就是僵尸狀態;

? ? ? ? ?只有被父進程讀取后(wait)后, PCB的狀態才會將Z狀態改為X狀態, 然后被OS回收;

危害 :

? ? ? ? 一個進程處于Z狀態, 父進程一直不讀取回收, 那么該進程的PCB就會一直存在, 造成內核級的內存泄露(內核資源浪費);

?????????這種危害主要在一些服務器中較為明顯, 服務器的服務會長時間的運行, 長時間的積累就會導致服務的效率變慢, 雖然重啟服務器可以將僵尸進程的PCB資源釋放, 但是對于服務器而言, 不可能輕易的關閉后重啟;

?模擬僵尸進程的產生:

int main()
{pid_t id = fork();if (id < 0) return 1;else if (id == 0) //子進程執行5秒后退出{int cnt = 5;while (cnt){printf("I am child , runing time:%d\n", cnt--);sleep(1);}printf("I am child ,dead!:%d\n", cnt--);exit(2);}else // 父進程一直運行, 但不回收子進程{while (1){printf("I am father, running times!\n");sleep(1);}}return 0;
}

?使用指令監控進程的狀態變化:

while :; do ps ajx | head -1 && ps ajx | grep myprocess | grep -v grep; sleep 1; done // myprocess為需要監控的進程名

?孤兒進程

?什么是孤兒進程?

? ? ? ? 父進程先退出,子進程就稱之為“孤兒進程”

父進程先退出,? 那么子進程退出時不就沒有進程來讀取子進程的PCB退出信息了嗎??

????????孤兒進程被1號init進程(OS)領養
?為什么被1號進程領養?

? ? ? ? 為了避免子進程退出, 沒有進程讀取子進程PCB的情況發生;?

? ? ? ? 父進程一旦退出, 子進程如果還沒有執行完畢, 就會被OS領養, 當子進程執行完畢退出后, 由OS進行讀取回收;?

模擬孤兒進程的產生:

int main()
{pid_t id = fork();if (id < 0) return 1;else if (id == 0) // 子進程一直運行{while (1){printf("I am child ...\n");sleep(1);}}else // 父進程運行5秒后退出{int cnt = 5;while (cnt){printf("I am father, running time:%d\n", cnt--);sleep(1);}printf("I am father dead:%d\n", cnt--);exit(2);}return 0;
}

?監控指令:

while :; do ps ajx | head -1 && ps ajx | grep myprocess | grep -v grep; sleep 1; done // myprocess為需要監控的進程名

?孤兒進程在實際應用中的使用:

? ? ? ? 孤兒進程的特性在一些并發服務中可以使用,? 服務器服務接收請求, 對請求進行處理時可以讓任務處理的主進程創建子進程去執行, 而主進程立即退出, 此時子進程就會變成孤兒進程, 被OS領養, 當子進程執行完畢后, 由OS進行回收, 任務處理的進程也不需要一直的等待子進程處理完畢;

?


總結

? ? ? ? 孤兒進程是為了避免父進程退出, 造成子進程無法被讀取, 導致子進程變成僵尸進程的情況; 僵尸進程對于服務器服務來說危害極大, 在編寫服務時要特別注意; 好了以上便是本文的全部內容, 希望對你有所幫助,? 感謝閱讀!

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

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

相關文章

揭秘代理IP:原理、優勢與應用場景全面解析

隨著數字化進程的加速&#xff0c;網絡安全已經成為現代社會不可或缺的一環。無論是政府機構、企業還是個人用戶&#xff0c;都面臨著越來越多的網絡威脅。本文將深入探討網絡安全的重要性、面臨的主要威脅以及應對策略&#xff0c;旨在為讀者提供一個全面的網絡安全視角。 1.…

黑馬點評學習過程匯總——Cookie \ Session \ Token的區別

1. Cookie \ Session \ Token的區別 10分鐘助你弄懂cookie、session、token 區別、用途&#xff01;&#xff01;&#xff01;_嗶哩嗶哩_bilibili &#xff08;1&#xff09;為什么要使用Cookie 在客戶端和服務端之間維持用戶登錄狀態 &#xff08;2&#xff09;為什么不能只…

類似Jira的在線項目管理軟件有哪些?10 個主流的Jira替代方案

10 個 Jira 替代方案&#xff1a;PingCode、Worktile、Teambition、Redmine、Asana、monday.com、Zoho Projects、思碼逸、Notion、Airtable。 Jira 是一款流行的項目管理工具&#xff0c;專為產品開發團隊而設計。雖然它是一種多功能解決方案&#xff0c;幾乎適用于任何類型的…

Git 操作補充:變基

變基 在 Git 中&#xff0c;整合來自不同分支的修改&#xff0c;除了 merge&#xff0c;還有一種方法&#xff0c;變基 rebase。git rebase 命令基本是是一個自動化的 cherry-pick 命令&#xff0c;它計算出一系列的提交&#xff0c;然后在其他地方以同樣的順序一個一個的 che…

流程表單設計器開源優勢多 助力實現流程化!

實現流程化辦公是很多職場企業的發展目標。應用什么樣的軟件可以實現這一目的&#xff1f;低代碼技術平臺、流程表單設計器開源的優勢特點多&#xff0c;在推動企業降本增效、流程化辦公的過程中作用明顯&#xff0c;是理想的軟件平臺。那么&#xff0c;流程表單設計器開源的優…

編譯Open Cascade(OCC)并使用C#進行開發

說明&#xff1a; VS版本&#xff1a;Visual Studio Community 2022系統&#xff1a;Windows 11 專業版23H2Open CASCADE&#xff1a;v7.7.0&#xff08;鏈接&#xff1a;https://pan.baidu.com/s/1-o1s4z3cjpYf5XkwhSDspQ?pwdp9i5提取碼&#xff1a;p9i5&#xff09; 下載和…

Julia精解【1】

文章目錄 轉換類型伴隨矩陣 轉換類型 在Julia中&#xff0c;可以使用內置函數來轉換或者調整數據類型。以下是一些常用的數據類型轉換方法&#xff1a; 轉換類型 Int(): 將浮點數或字符串轉換為整數。Float(): 將整數或字符串轉換為浮點數。String(): 將其他類型轉換為字符串…

闡述pandabuy淘寶代購集運系統在國外用戶采購中國商品重要性丨類似淘寶代購集運系統搭建經驗

Pandabuy淘寶代購集運系統在國外用戶采購中國商品中的重要性&#xff0c;主要體現在以下幾個方面&#xff1a; 一、滿足多樣化需求 Pandabuy系統為海外消費者提供了一個便捷的渠道&#xff0c;使他們能夠輕松購買到來自中國電商平臺的商品&#xff0c;如淘寶、天貓、京東等。…

python數據分析入門學習筆記

目錄 一、 數據分析有關的python庫簡介 (一)numpy (二)pandas (三)matplotlib (四)scipy (五)statsmodels (六)scikit-learn 二、 數據的導入和導出 三、 數據篩選 四、 數據描述 五、 數據處理 六、 統計分析 七、 可視化 八、 其它![](https://…

windows電腦藍屏解決方法(親測有效)

如果不是硬件問題&#xff0c;打開終端嘗試以下命令 sfc /scannow DISM /Online /Cleanup-Image /RestoreHealth

關于敏捷研發

文章目錄 前言瀑布流和敏捷研發流程瀑布流研發流程缺點 敏捷研發流程 前言 關于敏捷研發。 瀑布流和敏捷研發流程 瀑布流研發流程 1.需求 2.設計 3.開發 4.測試 缺點 流程之間關聯性很強&#xff0c;容易卡住風險不好預估&#xff0c;工時不好預估&#xff0c;如 2 個月的…

nodejs sqlite模塊

SQLite 是一個輕量級的嵌入式數據庫&#xff0c;它在 Node.js 中的使用通常是異步的。這意味著當你執行數據庫操作時&#xff0c;例如創建表、插入數據或查詢數據&#xff0c;這些操作會被放入事件隊列中異步執行&#xff0c;而不會阻塞主線程。 安裝sqlite3 npm install sql…

If you already have a 64-bit JDK installed ,defined a JAVA_HOME...的錯誤

今天感覺idea有點卡&#xff0c;修改了一下內存&#xff0c;結果就報這個錯誤了&#xff0c;網上的解決方案好多&#xff0c;都不行 以下是解決方案 打開 C:\Program Files\JetBrains\IntelliJ IDEA 2024.1.4\bin\jetbrains_client64.exe 把jihuo這個目錄下所有的文件都刪掉&…

通過easyexcel導入數據,添加表格參數的校驗,同表格內校驗以及和已有數據的校驗

引入依賴 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.11</version><scope>compile</scope></dependency> 需要導入到某個目錄下 如果產品名稱相同&#xff0c…

Mybatis數據封裝

目錄 解決方案&#xff1a; 1.起別名&#xff1a; 2.手動結果映射&#xff1a; 3.開啟駝峰命名(推薦)&#xff1a; 我們看到查詢返回的結果中大部分字段是有值的&#xff0c;但是deptId&#xff0c;createTime&#xff0c;updateTime這幾個字段是沒有值的&#xff0c;而數據…

分析數據不要太老實,有BI方案就用起來——奧威BI軟件

在當今數據驅動的時代&#xff0c;企業對于數據分析的需求日益迫切。然而&#xff0c;面對海量的數據和復雜的分析需求&#xff0c;許多企業仍停留在傳統的手工分析模式&#xff0c;這不僅效率低下&#xff0c;還容易出錯。幸運的是&#xff0c;像奧威BI這樣的數據分析軟件提供…

Linux——互斥與同步練習

用多線程程序設計一個火車票售票系統&#xff0c; 要求至少有兩個售票窗口&#xff0c;每個售票窗口 不能重復買票&#xff0c;將100張車票均勻的從兩個 窗口賣出即可。 ./a.out 窗口1 賣出車票 1 窗口2 賣出車票 2 窗口1 賣出車票 3 窗口2 賣出車票 4 ..... #include <std…

【深度學習】掃描全能王的AI驅動創新與智能高清濾鏡技術解析

目錄 引言1、掃描全能王2、智能高清濾鏡黑科技2.1、圖像視覺矯正2.2、去干擾技術 3、實際應用案例3.1、打印文稿褶皺檢測3.2、試卷擦除手寫3.3、老舊文件處理3.4、收銀小票3.5、從不同角度掃描文檔 4、用戶體驗結論與未來展望 引言 在數字化時代背景下&#xff0c;文檔掃描功能…

Vue3+Pinia

1.單純調接口(安裝pinia及引入如下第一張圖) 1.npm install pinia2.在main.js里引入即可import { createPinia } from piniaapp.use(createPinia()) 1.stores建立你文件的ts、內容如下&#xff1a;1-1 import { defineStore } from pinia1-2 import { findPageJobSet } from …

GitCode見證:華為云DevUI如何定義下一代前端開發

在當今快速發展的數字時代&#xff0c;前端開發已成為企業數字化轉型的關鍵一環。隨著用戶對交互體驗的期待不斷增長&#xff0c;擁有一個強大、靈活且易于使用的前端解決方案變得至關重要。 DevUI的誕生&#xff0c;源于華為對研發工具的深入理解和長期積累&#xff0c;作為一…