linux实例之僵尸进程

叶sir学编程 2024-08-01 09:00:46

当一个子进程结束运行,但是它的父进程没有处理该子进程的信息,那该子进程会成为一个僵尸进程。由于每一个进程都会占用一定的系统资源,包括进程的进程PID号等信息,如果系统里存在着大量的僵尸进程,不仅会占用很多系统资源,并且会导致系统的进程号被用光,从而无法运行新的进程,因此,在日常开发和使用,应该要避免僵尸进程的产生。

实例

1、编写一个简单的程序,用于制造一个僵尸进程,具体为,当父进程调用fork函数生成子进程,然后子进程终止运行,而父进程继续运行,且不调用wait函数清理子进程,如图:

图1

当子进程和父进程都在运行时,使用ps命令可以看到有两个相同的进程名在运行着。

当子进程结束,而父进程还在运行时,此时,子进程的进程名被中括号[]给包含,说明该子进程成为了一个僵尸进程,僵尸进程的一个特点是,进程名会被[]中括号包含。

当子进程和父进程都终止运行时,僵尸进程给消失了,说明系统会自动回收僵尸进程,前提是该僵尸进程的父进程也终止运行了。

在步骤1的基础上优化,使得子进程退出,父进程继续运行时,子进程不会成为一个僵尸进程,如图:

图2

当时程序中,调用了wait函数,在子进程终止运行时,清理对应的子进程,则该子进程不会成为一个僵尸进程。

0 阅读:8