❶ linux用戶進程內核態執行,內核線程的關系問題
1、幾乎所有的程序都要切換到內核態運行再返回用戶態,用中斷完成回的,因為在內核下答封裝了一些東西,用戶態下只是傳入某些參數後調用內核態下的函數罷了,
2、進程有三態(執行態,就緒態,阻塞態),cpu任何時刻都只有一個進程在執行,so從用戶態切換到內核態時,用戶態下的進程就處於阻塞或就緒態了,至於從用戶態切換到內核態執行哪個函數那就看你在用戶態下執行的是什麼函數了,比如在用戶態下的lseek在內核下就是llseek了,不一樣的。
3、這問題就是linux的內存管理了,這里就得提到三種地址(邏輯地址、線性地址、物理地址),這里我們提到的4G地址是邏輯地址,不是我們實際的物理地址,linux中一個進程用戶佔0-3G對應的內核佔3G-4G部分
說得不是很清楚,這是比較復雜的內容,需要從頭看起,單就這幾個問題是不能搞懂linux的,最好還是系統的學習,不斷的重復
❷ Linux內核本身和進程的區別 內核線程,用戶進程,用戶
1、幾乎所有的程序都要切換到內核態運行再返回用戶態,用中斷完成的,因為在內核下封裝了一版些權東西,用戶態下只是傳入某些參數後調用內核態下的函數罷了,
2、進程有三態(執行態,就緒態,阻塞態),cpu任何時刻都只有一個進程在執行,so從用戶態切換到內核態時,用戶態下的進程就處於阻塞或就緒態了,至於從用戶態切換到內核態執行哪個函數那就看你在用戶態下執行的是什麼函數了,比如在用戶態下的lseek在內核下就是llseek了,不一樣的。
3、這問題就是linux的內存管理了,這里就得提到三種地址(邏輯地址、線性地址、物理地址),這里我們提到的4G地址是邏輯地址,不是我們實際的物理地址,linux中一個進程用戶佔0-3G對應的內核佔3G-4G部分
說得不是很清楚,這是比較復雜的內容,需要從頭看起,單就這幾個問題是不能搞懂linux的,最好還是系統的學習,不斷的重復
❸ ubuntu Linux怎麼解決僵屍進程
找到僵屍進程,殺死即可
❹ 如何理解Linux中的OOM機制
Linux 內核有個機制叫OOM killer(Out-Of-Memory killer),該機制會監控那些佔用內存過大,尤其是瞬間很快消耗大量內存的進程,為了防止內存耗盡而內核會把該進程殺掉。
❺ 【kill】kill -9 殺不死的進程處理辦法
kill -9 發送SIGKILL信號給進程將其終止,但對於以下兩種情況不適用:
1.該進程是僵屍進程(STAT z),此時進程已經釋放所有的資源,但是沒有被父進程釋放。
僵屍進程要等到父進程結束,或者重啟系統才可以被釋放。
2.進程處於「內核態」,並且在等待不可獲得的資源,處於「內核態 」的資源默認忽略所有信號,只能重啟系統解決。
進程在Linux 中會處於兩種狀態,即用戶態和內核態。只有處於用戶態的進程才可以用「kill」命令將其終止
一般可以用top命令發現動態進程表,其中zombie是僵屍進程:
用ps和grep命令尋找僵屍進
# ps -A -o stat,ppid,pid,cmd
# ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]'
命令註解:
-A 參數列出所有進程
-o 自定義輸出欄位
我們設定顯示欄位為 stat(狀態), ppid(進程父id), pid(進程id),cmd(命令)這四個參數 因為狀態為 z或者Z的進程為僵屍進程。
我們使用grep抓取stat狀態為zZ進程,使用 kill -HUP ${pid} 來殺掉這個僵屍進程。