作為軟件測試人員,我們有時需要知道殭屍進程在我們的系統中是什麼樣子的。 如果我們具體知道哪個程序和進程 ID 與該殭屍進程相關聯,我們可以對其運行各種測試。
什麼是殭屍進程?
Linux 中的殭屍進程或死進程是一個已經完成的進程,但由於父子進程之間缺乏對應關係,它的條目仍然保留在進程表中。 通常,父進程通過 wait() 函數檢查其子進程的狀態。 當子進程完成時,等待函數通知父進程從內存中完全退出進程。 但是,如果父進程未能為其任何子進程調用等待函數,則子進程將在系統中作為死進程或殭屍進程保持活動狀態。 這些殭屍進程可能會大量堆積在您的系統上並影響其性能。
當你運行top命令並且一個zombie正在運行時,它會在輸出的第二行表示如下:
但是,如果您的系統上沒有運行殭屍進程,您可以創建一個虛擬進程用於測試目的,如本文所述。 我們在 Ubuntu 18.04 上運行這個過程。
創建殭屍進程
在本節中,我們將編寫 ac 程序來在我們的系統上運行殭屍進程。
打開文本編輯器並輸入以下代碼:
代碼
#include <stdlib.h> #include <sys/types.h> #include <unistd.h>int main () { pid_t child_pid;child_pid = fork (); if (child_pid > 0) { sleep (60); } else { exit (0); } return 0; }
Save 這個文件是zombie.c
通過此代碼創建的殭屍進程將運行 60 秒。 您可以通過在 sleep() 函數中指定時間(以秒為單位)來增加持續時間。
打開終端並運行以下命令來編譯這個程序:
$ cc zombie.c -o zombie
現在將創建一個名為zombie 的可執行文件。
請注意,如果您的系統上尚未安裝 GNU C 編譯器,則需要通過以下命令安裝它:
$ sudo apt-get install build-essential
現在通過以下命令運行殭屍程序:
./zombie
您將看到以下輸出:
測試時可以使用父進程ID(PPID)和子進程ID(PID); 為了 example 通過kill命令殺死這個殭屍進程。
在此進程運行時,您可以通過 top 命令在另一個終端窗口中查看系統性能。 您將能夠通過輸出的第二行看到 1 個殭屍進程。
ps 命令現在還將顯示這個已失效的進程和負責它的殭屍程序:
$ ps axo stat,ppid,pid,comm | grep -w defunct
此命令將為您提供狀態、parentID、進程 ID、正在運行殭屍進程的程序(我們在本教程中運行的殭屍程序)。
您現在已經學會瞭如何創建一個簡單的虛擬殭屍進程。 這將使您了解它在系統上的外觀以及如何將其用於測試目的。