如何在Ubuntu 18.04 LTS上创建虚拟僵尸进程

作为软件测试人员,您可能需要了解僵尸程序在系统上的外观。如果您确切知道哪个程序和进程ID与僵尸进程相关联,则可以运行各种测试。

什么是僵尸进程?

Linux僵尸进程或非功能性进程是已完成的进程,但是其条目保留在进程表中,因为父进程和子进程之间没有对应关系。通常,父进程会使用wait()函数继续检查子进程的状态。当子进程退出时,wait函数将信号发送给父进程,从而完全从内存中杀死该进程。但是,如果父级未能调用子级的wait函数,则子进程将在系统中作为死进程或僵尸进程幸存下来。这些僵尸进程会在系统上大量积累并影响性能。

如果您运行top命令并且僵尸正在运行,它们将在输出的第二行中显示,如下所示:

僵尸进程显示在top命令中

但是,如果您的系统没有正在运行的僵尸进程,则可以创建一个虚拟对象以进行测试,如本文所述。我正在Ubuntu 18.04上运行此过程。

创建僵尸进程

在本部分中,您将创建一个在系统上运行僵尸进程的c程序。

打开文本编辑器,然后输入以下代码:

代号

#include 
#include 
#include int main ()
{
pid_t child_pid;child_pid = fork ();
if (child_pid > 0) {
sleep (60);
}
else {
exit (0);
}
return 0;
}

将此文件另存为zombie.c

使用此代码创建的僵尸进程运行60秒。您可以通过使用sleep()函数指定时间(以秒为单位)来增加持续时间。

打开一个终端并运行以下命令来编译该程序:

$ cc zombie.c -o zombie

这将创建一个名为Zombie的可执行文件。

请注意,如果未使用以下命令在系统上安装GNU C编译器,则需要安装它。

$ sudo apt-get install build-essential

使用以下命令运行僵尸程序:

./zombie

显示以下输出。

僵尸文件输出

在测试期间,您可以使用父进程ID(PPID)和子进程ID(PID)。例如,使用kill命令杀死该僵尸进程。

运行此过程时,可以使用top命令在单独的终端窗口中查看系统性能。您可以从输出的第二行看到一个僵尸进程。

ps命令还显示此无效进程以及负责该进程的僵尸程序。

$ ps axo stat,ppid,pid,comm | grep -w defunct

ps命令结果

该命令提供状态,parentID,进程ID以及运行僵尸进程的程序(本教程中运行的僵尸程序)。

您现在已经了解了如何创建简单的虚拟僵尸进程。这将使您了解系统的外观以及如何将其用于测试目的。

如何在Ubuntu 18.04 LTS上创建虚拟僵尸进程

Sidebar