Linux學習 9 24 不可中斷程序 殭屍程序

2021-09-27 09:12:14 字數 791 閱讀 4510

通過top命令檢視程序狀態,其中s列表示程序狀態。

s列的取值d是disk sleep的縮寫,即不可中斷狀態睡眠,一般表示程序正在跟硬體互動,並且互動過程不允許被其他程序或中斷打斷。

不可中斷狀態時為了保證程序資料與硬體狀態一致,並且正常情況下,不可中斷狀態在很短時間內就會結束。所以短時的不可中斷狀態程序可以忽略。

但是,當程序長時間都處於不可中斷狀態時,系統可能出現問題了。可以使用dstat、pidstat等工具,確認是不是磁碟i/o問題,進而排查相關的程序和磁碟裝置。

s列的取值z是zombie的縮寫,表示殭屍程序。就是程序實際上已經結束了,但是父程序還沒有**它的資源(比如程序描述符、pid等)。

殭屍程序是多程序應用很容易碰到的問題。正常情況下,當乙個程序建立子程序後,它應該通過系統呼叫wait()或者waitpid()等待子程序結束,**子程序的資源;而子程序在結束時,會向它的父程序傳送sigchild訊號,所以父程序還可以註冊sigchild訊號的處理函式,非同步**資源。

如果父程序沒有這麼做,或是子程序執行太快,父程序還沒來得及處理子程序狀態,子程序就已經提前退出,那這時的子程序就會變成殭屍程序。

通常,殭屍程序持續的時間都比較短,在父程序**它的資源後就會消亡;或者在父程序退出後,由init程序**後也會消亡。

一旦父程序沒有處理子程序的終止,還一直保持執行狀態,那麼子程序會一直處於殭屍狀態。大量的殭屍程序會用盡pid程序號,導致新程序不能建立,所以這種情況一定要避免。

殭屍程序是因為父程序沒有**子程序的資源而出現的,所以要解決殭屍程序,要找出父程序,在父程序裡解決。

Linux學習 中斷和中斷處理

2 中斷處理程式 3 上半部和下半部的對比 處理器的速度和外圍裝置的速度相差太遠,為了解決讓核心不做過多的無用功 使用輪詢 這是就需要一種機制在硬體需要時再向核心發出訊號 中斷機制 中斷機制可以更好的協同處理器和外部裝置,並且提高機器的效能 中斷 指的是可以使得硬體得以發出通知給處理器,中斷可以隨時...

linux 驅動中斷部分學習

學習按鍵中斷,中斷程式可以在中斷函式中一次實現,也可以分開在中斷的上下半部實現,上半部實現緊急的處理,下半部做些不緊急的處理。上下半部的實現分為 軟中斷 tasklet 工作佇列 執行緒中斷。軟中斷和tasklet處理函式中不能睡眠。問題1 今天做工作佇列的實驗,在初始化函式中需要申請中斷號同時初始...

linux驅動學習 linux中斷程式編寫流程

linux中斷 1 確定中斷號 2 申請中斷號 request irq 不用一定要釋放free irq 3 編寫中斷服務函式 request irq unsigned int irq,irq handler t handler,unsigned long flags,const char name,...