殭屍進程

從中讀取條目 拉夫 我記得在一個論壇上有人因係統運行緩慢而尋求幫助,其中一些解決方案側重於流程。

Linux中進程的主要狀態是:
睡覺(S) :正在等待輪流執行的進程。
跑步(R) :正在運行的進程。
等待(D) :等待進入/退出操作完成的過程。
殭屍(Z) :已經結束但繼續出現在進程表中的進程。 它們可能是由編程錯誤引起的,並且可能是系統運行緩慢或引起問題的症狀。

殭屍進程是從未從創建它的父進程接收到信號的進程,子進程是其起源於稱為父進程的更高級別進程的進程,該進程負責將信號發送到生成的子進程以此表明他們的壽命已經結束。

它們可能是由編程錯誤引起的,並且可能是系統運行緩慢或引起問題的症狀。 通常也會發生這種情況,也是因為開發人員未考慮某些配置。

在Wikipedia中,您可以 閱讀更多 關於這些過程。

執行top命令可以實時看到系統中正在運行的進程,它將指示是否有任何進程處於殭屍狀態,但不會指示哪個進程處於殭屍狀態。

過程

要查看所有過程,請在終端中輸入: ps aux,並僅查看殭屍: ps -el | grep'Z'o ps -A -ostat,ppid,pid,cmd | grep -e'^ [Zz]'

阿爾夫@ Alf〜$ ps -A -ostat,ppid,pid,cmd | grep -e'^ [Zz]'

Ž1945

如果在列出進程時,其中一個進程的狀態為Z,則表示該進程是殭屍,這又意味著該應用程序無法很好地解決或存在錯誤,可以通過執行類似於以下命令來消除其PID:在終端中,在此示例中: 

阿爾夫@ Alf〜$ 殺死-9 1945

當您有多個殭屍進程或至少一個以上的殭屍進程時,可以使用以下命令將其殺死,這僅適用於此,如果您在沒有殭屍進程的情況下運行它,則將不會發生任何事情:

阿爾夫@ Alf〜$ sudo kill -HUP`ps -A -ostat,ppid,pid,cmd | grep -e'^ [Zz]'| awk'{print $ 2}'''

問候


發表您的評論

您的電子郵件地址將不會被發表。 必填字段標有 *

*

*

  1. 負責數據:MiguelÁngelGatón
  2. 數據用途:控制垃圾郵件,註釋管理。
  3. 合法性:您的同意
  4. 數據通訊:除非有法律義務,否則不會將數據傳達給第三方。
  5. 數據存儲:Occentus Networks(EU)託管的數據庫
  6. 權利:您可以隨時限制,恢復和刪除您的信息。

  1.   正確 他說:

    🙁

  2.   奧斯卡號 他說:

    非常感謝,我要保存命令以進行定期檢查。

  3.   玩笑 他說:

    謝謝,好文章。

  4.   MSX 他說:

    有關您的文章的一些說明:

    “殭屍進程”一詞在技術上是不合適的,對GNU / Linux有一點經驗的我們應該避免使用它,因為它本身沒有運行的進程,而只是對系統中不再存在的進程的引用。並且他沒有釋放他的標識符。

    實際上,“殭屍進程”是進程標識符(進程描述符)在映射表中的條目,因此,它不會消耗系統用來跟踪進程表的少量內存。

    幽靈(或殭屍)註冊表描述符可能存在的唯一問題是,如果它們生成速度太快,它們理論上可能會佔據整個進程描述符分配表,從而使系統沒有空間容納新記錄,因此可能無法運行新程序-記錄他們的過程-最終掛斷機器。

    但是,這幾乎是不可能發生的,因為在32位系統中,有32767個空間可以註冊進程(很少使用或從未使用過),而在64位系統中則是兩倍。

    使系統停止並嚴重刪除死進程的唯一方法是創建進程並迅速殺死它們,而沒有正確清理進程描述符(即創建“殭屍進程”),但是,如果有人想掛起一個進程,讓我們面對現實吧系統有比這更多的直接方法。 以指數方式快速開始創建新進程,從而阻塞系統並掛起它; 用叉子炸彈實現這一目標的方法之一:

    :(){:|:&};:

    您可以通過正確配置/etc/security/limits.conf來使系統相對抵禦分叉炸彈,儘管必須考慮到,我們越限制創建新進程的可能性,我們將能夠運行更少的應用程序但是,對於所有想對自己的系統進行很好控制的偏執的sysadmin來說,它是一個有效的工具!

    本文提供了有關無效進程描述符的良好信息:
    http://www.howtogeek.com/119815/htg-explains-what-is-a-zombie-process-on-linux/
    在此有一個關於叉炸彈如何工作的清晰解釋: http://stackoverflow.com/questions/991142/how-does-this-bash-fork-bomb-work

    Salu2

    1.    喬泰勒 他說:

      msx:“術語“殭屍進程”在技術上是不合適的,對GNU / Linux有一點經驗的我們應該避免使用它……”哈哈哈。 只有比您的驕傲更大的東西:您的不良品味。 嘿,您做的事情很不好,如果您想演講,在學院任教,或者創建您自己的博客並寫您想要的東西,但是來到這裡將公寓改正為好Alf確實很不好。 。

      1.    費爾南多·羅哈斯 他說:

        在我看來,真相似乎很有趣。 比帖子更多

  5.   普拉托諾夫 他說:

    謝謝你,很有意思。

  6.   腐爛87 他說:

    優秀的文章謝謝

  7.   阿爾夫 他說:

    MSX
    «術語“殭屍進程”在技術上是不合適的,對GNU / Linux缺乏經驗的我們應該避免使用它”

    我們將不得不通知開發人員,因為正如您將看到的那樣,還使用了殭屍一詞,因此我在控制台上閱讀了該詞。

    問候

  8.   城市 他說:

    恭喜,非常好的文章,我一直懷疑它們是PZ,但是我從來沒有時間進行調查,現在我進入頁面,遇到了答案,謝謝……

  9.   特魯科22 他說:

    在帶有控制+逃生系統的KDE中,活動會消失,我們可以迅速殺死那些殭屍。

  10.   他說:

    更正,這是ZOMBIE而不是ZOMBIE進程
    殭屍是英語
    西班牙殭屍

  11.   艾琳克斯 他說:

    豪華,謝謝!

  12.   羅伯托 他說:

    首先,殭屍一詞似乎完全正確。 該術語也是最不重要的。
    關鍵是,正如msx所指示的,並且同一個維基百科(我讀過這篇文章),殭屍進程真的死了。
    «當一個進程結束時,其所有與之關聯的內存和資源都將被取消引用,以便其他進程可以使用它們。 無論如何,過程表中的過程條目仍然保留»
    也就是說,該過程不再佔用系統資源,因此,系統上的負載最小,如msx所述。
    但是,它唯一擁有的是進程表中的無效條目……如果有成千上萬個條目,則可能是一個負擔(畢竟,處理器必須讀取進程表,並且它將讀取一個無效表)。除了反映不良的編程習慣(有人製作的應用程序製作不善)外,還包含很多無用的信息。
    但就其本身而言,該帖子的解釋不是那麼正確,正確的解釋應該是msx給出的解釋。