如何在 Ubuntu 18.04 LTS 中創建虛擬殭屍進程

作為軟件測試人員,我們有時需要知道殭屍進程在我們的系統中是什麼樣子的。 如果我們具體知道哪個程序和進程 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、正在運行殭屍進程的程序(我們在本教程中運行的殭屍程序)。

您現在已經學會瞭如何創建一個簡單的虛擬殭屍進程。 這將使您了解它在系統上的外觀以及如何將其用於測試目的。