僵尸進程是一個計算機程序的實例,盡管已完成執行,但仍保留進程表記錄。由于處理子進程的方式,此類已失效的進程通常與Unix?和其他類似操作系統關聯。當子進程完成執行時,父進程通常負責將其從進程表中刪除。通常不可能使...
僵尸進程是一個計算機程序的實例,盡管已完成執行,但仍保留進程表記錄。由于處理子進程的方式,此類已失效的進程通常與Unix?和其他類似操作系統關聯。當子進程完成執行時,父進程通常負責將其從進程表中刪除。通常不可能使用kill命令直接刪除僵尸進程,但如果操作員使用signal child(SIGCHLD)通知,則通常可以讓父進程將其刪除。否則,可以通過終止parent.Man holding computer Zombie進程是一個隱喻性的描述性術語,指的是活死人。在Unix?和類似操作系統中,失效的進程可以被視為類似于僵尸,因為它們在不再執行其預期功能的情況下仍保持進程表的存在。當進程完成時執行它有時被稱為死亡,而操作系統恢復其進程表分配的方式可能被稱為收獲(reaping),僵尸的父進程在技術上應該收獲它的子進程,盡管這種情況并不總是發生。在某些情況下,僵尸進程的存在可能是有意的,甚至是需要的。子進程停止執行后,父進程可能需要稍后運行同一程序的另一個實例。如果尚未從進程表中刪除僵尸,新的子進程將不會被分配與舊子進程相同的標識(ID)。某些程序可能會從中受益,甚至需要這種區分。如果父進程沒有執行wait命令來捕獲它所負責的僵尸,可能會強制執行這個問題,這通常是通過kill命令并向父進程發送SIGCHLD信號來完成的如果一切正常,接收此信號的父進程應獲取其僵尸子進程,以便其ID和進程表位置可以重用。在某些情況下,父進程可能會忽略SIGCHLD信號。如果發生這種情況,并且操作員仍希望清除進程表,父進程可能會被終止。父進程創建的任何僵尸都將被分配為init進程的子進程。由于init會定期在其子進程上啟動wait命令,它負責的任何僵尸最終都將從進程表中刪除
-
發表于 2020-08-06 07:28
- 閱讀 ( 900 )
- 分類:電腦網絡