當前位置:首頁 » 操作系統 » linux僵死進程

linux僵死進程

發布時間: 2023-05-16 20:01:55

linux裡面什麼是僵屍進程

僵屍進程是當子進程比父進程先結束,而父進程又沒有回收子進程,釋放手鄭行子進程佔用的資源,此時子進程都將成為一個僵屍進程。如果父進程先退出,子進程被init接管,子叢孫進程退出後init會收回其佔用的相關資源。

我們都知道進程的工作原畢嘩理。我們啟動一個程序,開始我們的任務,然後等任務結束了,我們就停止這個進程。進程停止後,該進程就會從進程表中移除。

你可以通過System-Monitor查看當前進程。

In UNIX System terminology, a process that has terminated,but whose parent
has not yet waited for it, is called a
zombie.在Unix系統中,一個進程結束了,但是它的父進程沒有等待它,那麼它將變成一個僵屍進程。但是如果該進程的父進程已經先結束了,那麼該進程就不會變僵屍進程,因為每個進程結束的時候,系統都會掃描當前系統中所運行的所有進程,看有沒有哪個進程是剛剛結束的這個進程的子進程,如果是的話,就由init來接管他,成為他的父進程。

怎麼查看僵屍進程?

利用命令ps,可以看到有父進程ID為1的進程是孤兒進程;s狀態為z的是僵屍進程。

注意:孤兒進程是尚未終止但已停止的進程,但其父進程已經終止,由init收養;而僵屍進程則是已終止的進程,其父進程不一定終止。

② 如何監視Linux系統資源的使用情況

如何監視Linux系統資源的使用情況

虛擬終端 命令 free
命令
可以用網路搜索
你值得擁有:25 個 Linux 性能監控工具
裡面有一些其它的好工具。

命令、uptime、free
參看::wenku../link?url=-_YXSztvNvIykFJ_C

Linux操作系統也會有鬧脾氣的時候。在某些情況下,其系統的資源使用率(包括CPU或者內存),也會達到90%以上甚至更多。為此系統管理員在必要的時候,仍然需要監視系統資源的使
雖然說Linux操作系統要比Windows操作系統穩定的多。但是這個穩定是相對而言的。也就是說,Linux操作系統也會有鬧脾氣的時候。在某些情況下,其系統的資源使用率(包括CPU或者內存),也會達到90%以上甚至更多。為此系統管理員在必要的時候,仍然需要監視系統資源的使用情況。筆者今天就給大家介紹一下,褲彎帶在Linux操作系統下如何監視這個系統資源,做到心中有數。
在Windows操作系統中,可以通過任務管理器來查詢各個進程所佔用的CPU與內存的比率。在Linux操作系統中沒有這種圖形化的管理。在命令行模式下,鍵入命令,即可以看到各個進程所佔用的系統資源。
ppp作為一個合格的系統管理員,出於系統性能優化或者其他方面的考慮,往往需要掌握系統中最消耗CPU或者內存資源的程序。為了達到這個目的,系統管理員就需要藉助系統提供的命令。這個命令可以幫助管理員監控系統資源的使用情況,包括內存、CPU、交換文件分區的使用率等等。就是這個命令的執行結果。系統管理員想要提升操作系統的性能,第一步就是需要讀懂上面這張表格。如果這種圖中的內容系統管理員無法看懂,那麼他就想提升系統的性能根本無法入手。
Top命令的運行結果大致可以分為兩個部分。上半部是使一些統計的信息,包括內存和交換分區的使用情況、CPU的運行情況、進程的總數等等。在這些統計信息中,系統管理員除了要關注這些重要資源的使用濾外,還需要注意進程運行的狀態。可見在Linux系統中進程的狀態主要有四種,分別為running、sleeping、sped和zombie。如果從系統維護與性能優化考慮,則系統管理員需要關注那些狀態為zombie的進程。若進程處於這個狀態,在Linux操作系統中叫做僵屍進程。什麼叫做僵屍進程呢?就是那些父進程還沒死、但鬧滑是子進程卻死了的進程。在Linux操作系統中,進程一般分為父進程和子進程。某個進程A可能會調用另外一個進程B。此時這個進程A就叫做父進程,而進程B就叫做子進程。由於一些意外的情況,子進程運行已經停止,但是父進程卻還不知道子進程早已停止運行,還在那邊傻傻的等待著子進程返回運行結果。由於子進程沒有返回結果,則父進程可能一直會在那邊等待。從而導致系統性能的下降。如果系統管理員發現有僵屍進程的話,首先要做的就是結束父進程(有時候還需要查看這個父進程打開的其他子進程運行情況),以釋放其佔用的系統資源。其次如果這種情況發生的比較頻繁時,則系統管理員就需要分析到底是什麼原因導致這種情況發生的。找到原因後要採取積極的措施。通常情況下,如果子進程的狀態為僵屍時,父進程就不會自動結束,從而其佔用的系統資源就不會自動釋放,從而降低操作系統的性能。
二、Top命令的使用技巧。
1、 選擇合適的排序順序。
在Windows操作系統的任務管理器中,管理員可以根據需要選擇合適的排序順序,如按CPU排序或者按內存的使用率進行排序。而在命令的顯示結果中,默認情況下是按照CPU的使用率來進行排序的。如果現在系統管理員想按照內存使用率來排序,該如何處理呢?如果要想改變命令結果的排序順序,則可以按m鍵來按內存進行排序。注意這里的m是小寫,而不是大寫的。在Linux操作系統中大部分命令與參數大小胡蘆寫都是敏感的。這跟微軟操作系統中的DOS命令不同。Dos命令是不區分大小寫的。雖然這個排序沒有像微軟操作系統中的任務管理器那麼方便,只需要點點滑鼠就可以完成排序。但是只要熟悉相關的命令,在命令行中對其排序沒有大家想想的那麼困難。
2、 監視特定用戶使用的資源情況。
在Windows操作系統中,如果想要查看特定帳戶所打開的進程以及所耗用的系統資源,操作非常簡單。只需要打開系統任務管理器,然後按照用戶來進行排序。就可以知道某個用戶開啟了哪些進程以及所佔用的比例。而在命令中,沒有按帳戶進行排序的功能。即在上面這個顯示結果中,只可以按照內存使用率或者CPU負載來進行排序,而無法按照用戶來進行排序。在同一個結果中夾雜著系統特權用戶root與普通用戶所打開的進程。這對於系統管理員查找問題原因非常的不方便。有時候系統管理員往往需要只查看特定用戶的進程,如只需要查看oracle帳戶所打開的進程以及所佔用的系統資源。而忽略掉系統帳戶。因為特權帳戶其他用戶無權進行登陸操作,而其運行的往往是一些系統級別的進程,為此一般不會出現問題。而普通用戶可以運行一些應用程序。有時候他們糊里糊塗可能會打開一些非法程序,佔用大量的系統資源,從而降低系統性能。廢話少說,如何才能夠查看特定帳戶所啟動的進程呢?其實很簡單。現運行 命令,讓系統統計所有帳戶的進程。然後在需要查看特定帳戶的進程使,只需要按u鍵(注意小寫),然後輸入用戶名即可。此時系統會自動把其他帳戶的進程過濾掉,方便系統管理員查看。按用戶過濾後,仍然可以按m鍵來對現實的結果進行過濾。如果在一開始就需要查看某個特定用戶的進程,那麼只需要直接在 命令後面加入-u可選項然後帶上具體的用戶名即可。但是,此時如果再想查看全部用戶的話,那麼只有先推出命令,然後再利用命令不帶任何選項,來查看所有用戶的進程。或者說,再在這個窗口中輸入字元u,然後直接按回車鍵,也可以顯示所用用戶的進程信息。
3、動態統計信息。
使用命令來統計進程的運行信息,跟微軟操作系統的任務管理器一樣,都是動態調整的。也就是說,系統會每隔一段時間去統計這個信息,然後動態的顯示在窗口中。不需要用戶手工去更新相關的信息。而且從上面的圖形中可以看出,命令統計的信息要比微軟任務管理器統計的信息要多的多。所以對系統管理員來說,具有更大的參考價值。筆者以前也很喜歡採用微軟操作系統的任務管理器。而了解了命令後,就對其鍾愛有加了。因為其不僅可以完成任務管理器中的所有功能。而且命令中有的信息在微軟任務管理器中卻無法顯示。而這些信息往往對我們維護系統、提升性能具有很大的參考價值。
4、刪除有異常的進程。
如果這個窗口中,發現某些進程有異常或者用戶執行了規定以外的應用程序,如佔用了太多的系統資源或者有僵屍進程的存在,則可以直接在這個窗口中講其刪除。操作的方法很簡單,只需要在這個窗口內輸入字元p,然後系統會提示系統管理員輸入要關閉進程的PID。管理員只需要鍵入這個值,然後按回車鍵就可以殺掉不需要的進程。不過在關閉進程的時候,有許可權的限制。系統特權帳戶root可以關閉所有用戶的進程。而普通帳戶則只能夠刪除自己打開的程序,而無法關閉其他用戶的進程。如現在系統管理員先以oracle用戶登錄,發現root帳戶下某個進程異常,想要關閉時,系統會提示無法關閉的錯誤信息。此時管理員必須先終止這個進程,然後利用su命令更改登陸的帳戶。然後再關閉這個異常的進程。系統管理員可以同時關閉多個進程。方法很簡單,就是同時輸入多個需要關閉的進程號。在各個進程號之間需要利用逗號隔開。
在系統維護中是一個很有用的命令。除了可以實現如上的功能外,還可以設置其動態更新的時間間隔等等。不過需要注意的是,在不同版本的 Linux系統中其功能稍有差異,而且其顯示的布局與內容也有所不同。為此當系統管理員維護其不怎麼熟悉的版本時,有時候需要查看系統的幫助說明。此時只需要在命令後面加上?號就可以獲得相關的幫助。這個聯機幫助文檔根命令一樣,都是系統管理員的好幫手。不過可惜的是,現在這些在線幫助文檔都是英文的。所以這對系統管理員的英文說明要求比較高。

Linux系統下如何監視系統資源使用率求解答

但是這個穩定是相對而言的。也就是說,Linux操作系統也會有鬧脾氣的時候。在某些情況下,其系統的資源使用率(包括CPU或者內存),也會達到90%以上甚至更多。為此系統管理員在必要的時候,仍然需要監視系統資源的使
雖然說Linux操作系統要比Windows操作系統穩定的多。但是這個穩定是相對而言的。也就是說,Linux操作系統也會有鬧脾氣的時候。在某些情況下,其系統的資源使用率(包括CPU或者內存),也會達到90%以上甚至更多。為此系統管理員在必要的時候,仍然需要監視系統資源的使用情況。筆者今天就給大家介紹一下,在Linux操作系統下如何監視這個系統資源,做到心中有數。
在Windows操作系統中,可以通過任務管理器來查詢各個進程所佔用的CPU與內存的比率。在Linux操作系統中沒有這種圖形化的管理。在命令行模式下,鍵入命令,即可以看到各個進程所佔用的系統資源。
ppp作為一個合格的系統管理員,出於系統性能優化或者其他方面的考慮,往往需要掌握系統中最消耗CPU或者內存資源的程序。為了達到這個目的,系統管理員就需要藉助系統提供的命令。這個命令可以幫助管理員監控系統資源的使用情況,包括內存、CPU、交換文件分區的使用率等等。就是這個命令的執行結果。系統管理員想要提升操作系統的性能,第一步就是需要讀懂上面這張表格。如果這種圖中的內容系統管理員無法看懂,那麼他就想提升系統的性能根本無法入手。
Top命令的運行結果大致可以分為兩個部分。上半部是使一些統計的信息,包括內存和交換分區的使用情況、CPU的運行情況、進程的總數等等。在這些統計信息中,系統管理員除了要關注這些重要資源的使用濾外,還需要注意進程運行的狀態。可見在Linux系統中進程的狀態主要有四種,分別為running、sleeping、sped和zombie。如果從系統維護與性能優化考慮,則系統管理員需要關注那些狀態為zombie的進程。若進程處於這個狀態,在Linux操作系統中叫做僵屍進程。什麼叫做僵屍進程呢?就是那些父進程還沒死、但是子進程卻死了的進程。在Linux操作系統中,進程一般分為父進程和子進程。某個進程A可能會調用另外一個進程B。此時這個進程A就叫做父進程,而進程B就叫做子進程。由於一些意外的情況,子進程運行已經停止,但是父進程卻還不知道子進程早已停止運行,還在那邊傻傻的等待著子進程返回運行結果。由於子進程沒有返回結果,則父進程可能一直會在那邊等待。從而導致系統性能的下降。如果系統管理員發現有僵屍進程的話,首先要做的就是結束父進程(有時候還需要查看這個父進程打開的其他子進程運行情況),以釋放其佔用的系統資源。其次如果這種情況發生的比較頻繁時,則系統管理員就需要分析到底是什麼原因導致這種情況發生的。找到原因後要採取積極的措施。通常情況下,如果子進程的狀態為僵屍時,父進程就不會自動結束,從而其佔用的系統資源就不會自動釋放,從而降低操作系統的性能。
二、Top命令的使用技巧。
1、 選擇合適的排序順序。
在Windows操作系統的任務管理器中,管理員可以根據需要選擇合適的排序順序,如按CPU排序或者按內存的使用率進行排序。而在命令的顯示結果中,默認情況下是按照CPU的使用率來進行排序的。如果現在系統管理員想按照內存使用率來排序,該如何處理呢?如果要想改變命令結果的排序順序,則可以按m鍵來按內存進行排序。注意這里的m是小寫,而不是大寫的。在Linux操作系統中大部分命令與參數大小寫都是敏感的。這跟微軟操作系統中的DOS命令不同。Dos命令是不區分大小寫的。雖然這個排序沒有像微軟操作系統中的任務管理器那麼方便,只需要點點滑鼠就可以完成排序。但是只要熟悉相關的命令,在命令行中對其排序沒有大家想想的那麼困難。
2、 監視特定用戶使用的資源情況。
在Windows操作系統中,如果想要查看特定帳戶所打開的進程以及所耗用的系統資源,操作非常簡單。只需要打開系統任務管理器,然後按照用戶來進行排序。就可以知道某個用戶開啟了哪些進程以及所佔用的比例。而在命令中,沒有按帳戶進行排序的功能。即在上面這個顯示結果中,只可以按照內存使用率或者CPU負載來進行排序,而無法按照用戶來進行排序。在同一個結果中夾雜著系統特權用戶root與普通用戶所打開的進程。這對於系統管理員查找問題原因非常的不方便。有時候系統管理員往往需要只查看特定用戶的進程,如只需要查看oracle帳戶所打開的進程以及所佔用的系統資源。而忽略掉系統帳戶。因為特權帳戶其他用戶無權進行登陸操作,而其運行的往往是一些系統級別的進程,為此一般不會出現問題。而普通用戶可以運行一些應用程序。有時候他們糊里糊塗可能會打開一些非法程序,佔用大量的系統資源,從而降低系統性能。廢話少說,如何才能夠查看特定帳戶所啟動的進程呢?其實很簡單。現運行 命令,讓系統統計所有帳戶的進程。然後在需要查看特定帳戶的進程使,只需要按u鍵(注意小寫),然後輸入用戶名即可。此時系統會自動把其他帳戶的進程過濾掉,方便系統管理員查看。按用戶過濾後,仍然可以按m鍵來對現實的結果進行過濾。如果在一開始就需要查看某個特定用戶的進程,那麼只需要直接在 命令後面加入-u可選項然後帶上具體的用戶名即可。但是,此時如果再想查看全部用戶的話,那麼只有先推出命令,然後再利用命令不帶任何選項,來查看所有用戶的進程。或者說,再在這個窗口中輸入字元u,然後直接按回車鍵,也可以顯示所用用戶的進程信息。
3、動態統計信息。
使用命令來統計進程的運行信息,跟微軟操作系統的任務管理器一樣,都是動態調整的。也就是說,系統會每隔一段時間去統計這個信息,然後動態的顯示在窗口中。不需要用戶手工去更新相關的信息。而且從上面的圖形中可以看出,命令統計的信息要比微軟任務管理器統計的信息要多的多。所以對系統管理員來說,具有更大的參考價值。筆者以前也很喜歡採用微軟操作系統的任務管理器。而了解了命令後,就對其鍾愛有加了。因為其不僅可以完成任務管理器中的所有功能。而且命令中有的信息在微軟任務管理器中卻無法顯示。而這些信息往往對我們維護系統、提升性能具有很大的參考價值。
4、刪除有異常的進程。
如果這個窗口中,發現某些進程有異常或者用戶執行了規定以外的應用程序,如佔用了太多的系統資源或者有僵屍進程的存在,則可以直接在這個窗口中講其刪除。操作的方法很簡單,只需要在這個窗口內輸入字元p,然後系統會提示系統管理員輸入要關閉進程的PID。管理員只需要鍵入這個值,然後按回車鍵就可以殺掉不需要的進程。不過在關閉進程的時候,有許可權的限制。系統特權帳戶root可以關閉所有用戶的進程。而普通帳戶則只能夠刪除自己打開的程序,而無法關閉其他用戶的進程。如現在系統管理員先以oracle用戶登錄,發現root帳戶下某個進程異常,想要關閉時,系統會提示無法關閉的錯誤信息。此時管理員必須先終止這個進程,然後利用su命令更改登陸的帳戶。然後再關閉這個異常的進程。系統管理員可以同時關閉多個進程。方法很簡單,就是同時輸入多個需要關閉的進程號。在各個進程號之間需要利用逗號隔開。
在系統維護中是一個很有用的命令。除了可以實現如上的功能外,還可以設置其動態更新的時間間隔等等。不過需要注意的是,在不同版本的 Linux系統中其功能稍有差異,而且其顯示的布局與內容也有所不同。為此當系統管理員維護其不怎麼熟悉的版本時,有時候需要查看系統的幫助說明。此時只需要在命令後面加上?號就可以獲得相關的幫助。這個聯機幫助文檔根命令一樣,都是系統管理員的好幫手。不過可惜的是,現在這些在線幫助文檔都是英文的。所以這對系統管理員的英文說明要求比較高。

我想監視linux系統的內存使用情況,在linux下有哪

[root@iZ259r7h4pfZ ~]#
- 16:48:24 up 226 days, 8:34, 1 user, load average: 0.00, 0.00, 0.01
Tasks: 204 total, 1 running, 164 sleeping, 0 sped, 39 zombie
Cpu(s): 0.9%us, 0.9%sy, 0.0%ni, 98.1%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1920740k total, 1123552k used, 797188k free, 24216k buffers
Swap: 0k total, 0k used, 0k free, 87436k cached
[root@iZ259r7h4pfZ ~]# free -m
total used free shared buffers cached
Mem: 1875 1097 778 0 23 85
-/+ buffers/cache: 988 887
Swap: 0 0 0
也可以用watch監控
[root@iZ259r7h4pfZ ~]# watch -n 1 "free -m"
Every 1.0s: free -m Tue Oct 31 16:48:44 2017
total used free shared buffers cached
Mem: 1875 1098 777 0 23 85
-/+ buffers/cache: 989 886
Swap: 0 0 0

LoadRunner如何監控Linux系統資源

這個需要配置吧
:blogs./yangxia-test/archive/2012/11/27/2790771.

怎樣使用loadrunner監控linux系統資源

LR只是模擬客戶端和伺服器進行交互,並不能直觀的收集伺服器是內部的信息,如果要監控伺服器性能情況,linux系統可以用nmon(或者用命令不過,只能監控內存之類的情況,寫一個shell腳本定時輸出日誌到本地就可以了),oracle可以用awr。

如何查看linux資源使用情況

Linux查看系統資源佔用
在系統維護的過程中,隨時可能有需要查看 CPU和內存的使用率,並根據相應信息分析系統狀況的需求。本文介紹一下幾種常見的Linux系統資源查看命令。
1、總體內存佔用的查看
命令:free
圖1 free命令查看內存佔用
(1) free命令默認是以kb為單位顯示的,可以用free -m 用Mb單位來顯示。
(2) Mem行 : total = used + free 其中buffers和cached雖然計算在used內, 但其實為可用內存。
(3) Mem下一行:used為真實已佔內存,free為真實可用內存。
(4)Swap:內存交換區的使用情況。
2、查看內存佔用前五的進程
命令:ps auxw | head -1;ps auxw|sort -rn -k4|head -5
圖 2.1查看內存佔用前5的進程
如圖2.1所示, 內存的單位是kb,VSZ是虛擬內存的佔用,RSS是真實的內存的佔用。
命令分解:
ps auxw顯示系統資源佔用情況;
head -1表示顯示第一列,即標題列;
sort -r 表示反向排序,-n表示按數字排序,-k4表示列的第4個字元。
3、查看CPU佔用前三的進程
命令:ps auxw|head -1;ps auxw|sort -rn -k3|head -3
圖3.1 查看cpu佔用前三的進程
該命令與圖2.1相仿,只是選擇的資源佔用情況的第3列(即cpu),用「-k3」表示。
4、查看系統整體的負載
命令:
圖4.1 顯示系統整體負載
(1)第一行: 系統時間 + 系統運行時間 + 幾個用戶 + 1/5/15分鍾系統平均負載
(2)第二行:進程總數(total) + 正在運行進程數(running) + 睡眠進程數(sleeping) + 停止的進程數(sped)+ 僵屍進程數(zombie)
(3)第三行:用戶空間CPU佔比(us) + 內核空間CPU佔比(sy)+ CPU空置率(id)
圖4.2 各個任務佔用資源情況
註解:
PID :進程ID
USER :用戶名
PR :優先順序
NI :負值表示高優先順序,正值表示低優先順序。
VIRT :虛擬內存
RES : 真實內存
SHR :共享內存
S :進程狀態 D=不可中斷的睡眠狀態; R=運行; S=睡眠 ;T=跟蹤/停止; Z=僵屍進程
參數:
-d 2 :每隔2秒顯式所有進程的資源佔用情況
-c :每隔5秒顯式進程的資源佔用情況,並顯示進程的命令行參數(默認只有進程名)
-p 12345 -p 6789:每隔5秒顯示pid是12345和pid是6789的兩個進程的資源佔用情況
-d 2 -c -p 123456 :每隔2秒顯示pid是12345的進程的資源使用情況,並顯式該進程啟動的命令行參數

如何使用vmstat命令監視 CPU 的使用情況

假設一個線程被調度運行,它將一直運行直到它的時間片用完、直到被搶先或直到它自己主動放棄 CPU 控制權。
當另一個線程被賦予 CPU 控制權時,必須保存前一個線程的上下文或工作環境,並載入當前線程的上下文。操作系統有一個很有效的上下文切換過程,所以每次切換並不耗費資源。
任何上下文切換的顯著增加,如當 cs 比磁碟 I/O 和網路包速率高的多,都應進行進一步調查。

③ 如何找到並終止 Linux 系統中的僵屍進程

在了解僵屍進程之前,讓我們來復習一下什麼是 Linux 進程。

簡而言之, 進程 [1] 是一個程序的運行實例。它可能稿陵運行在前端(比如有交互的進程),也可能運行在後端(比如無交互或自動運行的進程)。它可能是一個父進程(運行期間創建了其他進程),也可能是一個子進程(由其他進程所創建)。

在 Linux 系統中,除 PID 為 0 的第一個 init 進程(或 systemd )外,其餘進程都有父進程。進程也可以擁有自己的子進程。

不相信?可以試試在終端中使用 pstree 命令查看進程的樹型結構,你能看到系統各個進程的「家族樹」。

子進程死亡後,它的父進程會接收到通知去執行一些清理操作,如釋放內存之類。然而,若父進程並未察覺到子進程死亡,子進程就會進入到「<ruby style="box-sizing: border-box;">僵屍<rt style="box-sizing: border-box;">zombie</rt></ruby>」狀態。從父進程角度看,子進程仍然存在,即使子進程實際上已經死亡。這就是「<ruby style="box-sizing: border-box;">僵屍進程<rt style="box-sizing: border-box;">zombie process</rt></ruby>」(也被稱為「<ruby style="box-sizing: border-box;">已消失進程<rt style="box-sizing: border-box;">defunct process</rt></ruby>」)是如何產生並存在於系統中的。

這里有一個來自 Turnoff.us [2] 的關於僵屍進程的非常有趣的看法:

Image credit: Turnoff.us

重點要說的是,僵屍進程並沒有像它的名稱那樣看起來可怕。

但如果系統的內存已經所剩不多或者有太多的僵屍進程在吃掉內存,問題會變得糟糕。同樣,大部分 Linux 系統進程最大 PID 設置為 32768,如果過多僵屍進程導致其他重要任務沒悄衡有 PID 可用,你的系統會發生崩潰。

這是真實可能發生的,它有一定的概率,特別當存在一個編碼糟糕的程序開始大量產生僵屍進程的時候。

在這種情況下,找到並殺死僵屍進程是一個明智的做法。

Linux 系統中的進程可能處於如下狀態中的一種:

那如何查看進程和它的當前狀態呢?一個簡單的方法啟敬做是在終端中使用 top 命令 [3]。

Top command show processes and their status

正如你在上面截圖中看到的,截圖中共有 250 個任務(進程),其中 1 個處在 「<ruby style="box-sizing: border-box;">運行中<rt style="box-sizing: border-box;">running</rt></ruby>」 狀態,248 個進程處於 「<ruby style="box-sizing: border-box;">休眠<rt style="box-sizing: border-box;">sleep</rt></ruby>」 狀態,還有一個處於 「<ruby style="box-sizing: border-box;">僵屍<rt style="box-sizing: border-box;">zombie</rt></ruby>」 狀態。

現在問題進入下一步,如何殺死 「僵屍」 進程?

僵屍進程已經死了,要如何才能殺死一個已經死亡的進程呢?

在僵屍電影中,你可以射擊僵屍的頭部或燒掉它們,但在這里是行不通的。你可以一把火燒了系統來殺死僵屍進程,但這並不是一個可行的方案。

一些人建議發送 SIGCHLD 給父進程,但這個信號很可能會被忽略。還有一個方法是殺死父進程來殺死僵屍進程,這聽起來很野蠻,但它卻是唯一能確保殺死僵屍進程的方法。

首先,通過在終端中 使用 ps 命令 [4] 我們列舉僵屍進程,得到它們的進程 ID:

<pre class="prettyprint linenums" style="box-sizing: border-box; overflow: hidden; font: 400 12px / 20px "courier new"; display: block; padding: 10px 15px; margin: 20px 0px; color: rgb(248, 248, 212); word-break: break-all; overflow-wrap: break-word; background: rgb(39, 40, 34); border: none; border-radius: 4px; box-shadow: rgb(57, 56, 46) 40px 0px 0px inset, rgb(70, 71, 65) 41px 0px 0px inset; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">

</pre>

ps ux 命令輸出的第 8 列顯示了進程狀態。上述命令只會列印所有處在 Z+ 狀態(表示僵屍狀態)的進程。

確認了進程 ID 後,我們可以得到它的父進程 ID:

<pre class="prettyprint linenums" style="box-sizing: border-box; overflow: hidden; font: 400 12px / 20px "courier new"; display: block; padding: 10px 15px; margin: 20px 0px; color: rgb(248, 248, 212); word-break: break-all; overflow-wrap: break-word; background: rgb(39, 40, 34); border: none; border-radius: 4px; box-shadow: rgb(57, 56, 46) 40px 0px 0px inset, rgb(70, 71, 65) 41px 0px 0px inset; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">

</pre>

你也可以將上述兩個命令結合在一起,直接得到僵屍進程的 PID 及其父進程的 PID:

<pre class="prettyprint linenums" style="box-sizing: border-box; overflow: hidden; font: 400 12px / 20px "courier new"; display: block; padding: 10px 15px; margin: 20px 0px; color: rgb(248, 248, 212); word-break: break-all; overflow-wrap: break-word; background: rgb(39, 40, 34); border: none; border-radius: 4px; box-shadow: rgb(57, 56, 46) 40px 0px 0px inset, rgb(70, 71, 65) 41px 0px 0px inset; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">

</pre>

現在你得到了父進程 ID,使用命令行和得到的 ID 號 終於可以殺死進程了 [5]:

<pre class="prettyprint linenums" style="box-sizing: border-box; overflow: hidden; font: 400 12px / 20px "courier new"; display: block; padding: 10px 15px; margin: 20px 0px; color: rgb(248, 248, 212); word-break: break-all; overflow-wrap: break-word; background: rgb(39, 40, 34); border: none; border-radius: 4px; box-shadow: rgb(57, 56, 46) 40px 0px 0px inset, rgb(70, 71, 65) 41px 0px 0px inset; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">

</pre>

Killing parent process

再次運行 ps 命令或 top 命令,你可以驗證僵屍進程是否已經被殺死。

恭喜!現在你知道怎麼清理僵屍進程了。

via: https://itsfoss.com/kill-zombie-process-linux/

④ Linux中如何殺掉僵屍進程

1、使用top命令就可以查看到僵屍進程。

說明:不是查不出僵屍進程,是因為我重啟了系統,沒有僵屍進程。

3、殺死僵屍進程

#kill -9 pid號


⑤ ubuntu Linux怎麼解決僵屍進程

僵屍進程的產生是因為父進程沒有 wait() 子進程。所以如果我們自己寫程序好前的話一定要在父進程中通過 wait() 來避免僵屍進程的產生。
當系統中出現了僵屍進程時,我們是無法通過 kill 命令把它清旦襪塌除掉的。模圓但是我們可以殺死它的父進程,讓它變成孤兒進程,並進一步被系統中管理孤兒進程的進程收養並清理。

⑥ ubuntu Linux怎麼解決僵屍進程

inux 允許進程查詢內核以獲得其父進程的 PID,或者其任何子進程的執行狀態。例如,進程可以創建一個子進程來執行特定的任務,然後調用諸如 wait() 這樣的一些庫函數檢查子進程是否終止。如果子進程已經終止,那麼,它的終止代號將告訴父進程這個任務是否已成功地完成。
為了遵循這些設計原則,不允許 Linux 內核在進程一終止後就丟棄包含在進程描述符欄位中的數據。只有父進程發出了與被終止的進程相關的 wait() 類系統調用之後,才允許這樣做。這就是引入僵死狀態的原因:盡管從技術上來說進程已死,但必須保存它的描述符,直到父進程得到通知。
如果一個進程已經終止,但是它的父進程尚未調用 wait() 或 waitpid() 對它進行清理,這時的進程狀態稱為僵死狀態,處於僵死狀態的進程稱為僵屍進程(zombie process)。任何進程在剛終止時都是僵屍進程,正常情況下,僵屍進程都立刻被父進程清理了

⑦ ubuntu Linux怎麼解決僵屍進程

「首先打開Ubuntu桌面 然後准備一個僵屍程序a,接著滑鼠右鍵單擊open in terminal,打開終端 輸入./a &,運行僵汪灶屍程序 輸入ps au,查找僵屍程序。凡笑陵圓是STAT是Z的就是僵屍程序,通過Ubuntu Dash,敲入system 單擊system monitor(系統監視器) 找到在終端帶Z的進程的pid,選中它,右鍵單擊kill,直接將碰塌其kill就行了」

⑧ 如何查找和殺掉Linux中的僵屍進程

Linux 系統中,進程就是一個程序的運行實例。它可能運行在前端(比如有交互的進程),也可能運行在後端(比如無交互或自動運行的進程)。它可能是一個父進程(運行期間創建了其他進程),也可能是一個子進程(由其他進程所創建)。

在 Linux 系統中,除 PID 為 0 的第一個 init 進程(或 systemd )外,其餘進程都有父進程。進程也可以擁有自己的子進程。

你可以通過使用 pstree 命令 來查看進程的樹型結構,你可以清晰的看到各個進程的「家族樹」。

在 Linux 系統中,正常情況下,子進程死亡後其父進程會接收到通知進行一些例歷答如釋放內存之類的清理操作。但是,如果父進程未收到通知察覺子進程死亡,那麼子進程就進入了「僵死」狀態。

這就是僵死進程產生的原因。

僵屍進程並不可怕,少量的僵屍進程對系統影響並不大。但如果系統的內存已經所剩不多或者有太多的僵屍進程在耗掉內存,問題會變得糟糕。

同樣,大部分 Linux 系統進程最大 PID 設置為 32768,如果過多僵屍進程導致其他重要任務沒有 PID 可用,那麼你的系統會發生崩潰。

特別當存在一個編碼糟糕的程序開始大量產生僵屍進程的時候,這種情況經常發生。在這種情況下,我們就需要找到並殺死僵屍進程。

在linux系統中,進程有如下幾種狀態,它們隨時可能處於以上狀態肢彎慧中的一種:

我們可以在命令終端中通過 top命令 來查看系統進程和它的當前狀態。

命令如下:

如上面截圖中看到的,其中共有 250 個任務(進程),其中 1 個處在 「運行中running」 狀態,248 個進程處於 「休眠sleep」 狀態,還有一個處於 「僵屍zombie」 狀態。

現在問題進入下一步,如何殺死 「僵屍」 進程?

僵屍進程對系統來說就是已經死亡的進程,那麼如何殺掉一個已經死亡的進程呢?

方法很簡單,我們只需要通過如下ps命令就可以列舉僵屍進程,得到它們的進程 ID。

ps ux 命令輸出的第 8 列顯示了進程狀態。上述命令將會列印所有處在 Z+ 狀態(表示僵屍狀態)的進程。

確認了進程 ID 後,我們可以得到它的父進程 ID:

你也可以將上述兩個命令結合在一起,直接得到僵屍進程的 PID 及其父進程的 PID:

通過以上命令都可以找到僵屍進程,然後你就可以通過 kill命 令殺掉了。

或者通過如下命令查看僵屍進程:

該命令輸出結果上你可以直接看出其父進程ID,這時候你直接使用kill命令殺掉即可。

再次運行 ps 命令或 top 命令,你可以驗證僵屍進程是否已經被殺死。

通過本文你將認識 Linux 系統中的僵屍進程以及明白了其產生的主要原因。同時,你也能學會如何查找僵屍僵屍進程並殺掉僵屍進程。

當然你也可以自己別寫腳本設置成定時運行任務自動來替你鬧森做這些工作。

⑨ ubuntu Linux怎麼解決僵屍進程

如何查看linux系統上的僵屍進程,如何統計有多少僵屍進程?

#ps -ef | grep defunct

或者查找狀態為Z的進程,Z就是代表zombie process,僵屍進程的意思。

另外使用top命令查看時有一欄為S,如果狀態為Z說明它就是僵屍進程。

Tasks: 95 total, 1 running, 94 sleeping, 0 stopped, 0 zombie

top命令中也統計了僵屍進程。或者使用下面的命令:

ps -ef | grep defunct | grep -v grep | wc -l

如何殺死僵屍進程呢?
一般僵屍進程很難直接kill掉,不過您可以kill僵屍爸爸。父進程死後,僵屍進程成為」孤兒進程」,過繼給1號進程init,init始終會負責清理僵屍進程.它產生的所有僵屍進程也跟著消失。

ps -e -o ppid,stat | grep Z | cut -d」 」 -f2 | xargs kill -9



kill -HUP `ps -A -ostat,ppid | grep -e 』^[Zz]『 | awk 』{print $2}』`

當然您可以自己編寫更好的shell腳本,

⑩ linux kill -9 殺不掉的進程

kill -9 發送SIGKILL信號給進程,將其終止,但對於以下兩種情況不適用

1.該進程是僵屍進程(STAT z),此時進程已經釋放所有的資源,但是沒有被父進程釋放。僵屍進程要等到父進程結束,或者重啟系統才可以被釋悄配放。

2.進程處於「核心態」,並且在等待不可獲得的資源,處於「核心態 」的資源默認忽略所有信號。只能重啟系統。

kill 只能殺死處於用戶狀態的進程。

下面是一個自測試例子:

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <unistd.h>

#include <errno.h>

int main(int argc ,char *argv[])

{

    pid_t pid;

    pid = fork();

    if(pid<0){

   肢運滲     perror("fork");

        return -1;

    }else if(pid==0){

        printf("I am a child\n");

        exit(0);

    }else{

        while(1){

            sleep(100);

        }

    }

    return 0;

}

由於父進程沒有退出,所以執行ps -aux | grep "z",可以查看進程的狀態,發現如下(綠色標出部分)

root       1937  0.0  0.1 389000  4336 ?        Sl   09:12   0:00 /usr/bin/gnome-keyring-daemon --daemonize --login

root       4447  0.0  0.0 112680   964 pts/2    R+   10:16   0:00 grep --color=auto z

[root@localhost linux_test]# ps -aux | grep "[zZ]"

USER        PID %CPU %MEM    VSZ  歷脊 RSS TTY      STAT START   TIME COMMAND

root          1  0.0  0.1 128164  6828 ?        Ss   09:07   0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 21

root       1937  0.0  0.1 389000  4336 ?        Sl   09:12   0:00 /usr/bin/gnome-keyring-daemon --daemonize --login

root       4385  0.0  0.0      0     0 pts/0    Z+   10:16   0:00 [a.out] <defunct>

root       4455  0.0  0.0 112680   976 pts/2    S+   10:17   0:00 grep --color=auto [zZ]

從以上信息 可以得到該進程的進程號是4385

此時的解決方法有兩種

《1》 cat /proc/4385/status   找到該子進程對應的父進程,將其父進程殺死

State: Z (zombie)

Tgid: 4385

Ngid: 0

Pid: 4385

PPid: 4384

執行kill -9 4384   如果父進程也殺不死,那就只能執行重啟了

《2》重啟

熱點內容
活動上線前伺服器配置要注意什麼 發布:2025-05-15 16:38:43 瀏覽:947
王者榮耀安卓區怎麼免費轉蘋果 發布:2025-05-15 16:18:02 瀏覽:762
威朗pro高配都有哪些配置 發布:2025-05-15 15:57:09 瀏覽:957
資料庫分頁查詢數據 發布:2025-05-15 15:45:13 瀏覽:521
phpmyadmin上傳限制 發布:2025-05-15 15:39:52 瀏覽:432
如何給手機配置真正的電腦 發布:2025-05-15 15:39:52 瀏覽:765
抽腳本命令 發布:2025-05-15 15:39:45 瀏覽:660
sok編程 發布:2025-05-15 15:33:21 瀏覽:41
lms演算法程序 發布:2025-05-15 15:31:53 瀏覽:570
資料庫二級映射 發布:2025-05-15 15:14:09 瀏覽:478