linux c编程之创建、查看、杀死僵尸进程方法详解
发布网友
发布时间:2024-09-17 21:58
我来回答
共1个回答
热心网友
时间:2024-10-04 05:35
僵尸进程(Zombie process)简单来说就是那些尽管已经终止的进程,却依然保留一些信息,等待其父进程来清理。换言之,父进程未结束,但子进程已经结束,父进程仍然存活,却无法清理子进程。只有当父进程也死亡时,子进程才会被清理,哈哈。如果没有显式地调用wait/waitpid来清理子进程,这种情况就会出现。当然,如果父进程提前死亡,子进程将会由init进程接管,因此清理工作也就由init进程来完成了。
一,在linux下创建一个僵尸进程的c代码
这样,子进程一旦结束,父进程将永不会结束,也没有调用wait/waitpid。那么,子进程就变成了僵尸进程。
编译,gcc makeDefunct.c -o makeDefunct
我的文件名是makeDefunct.c,运行./makeDefunct
需要C/C++ Linux服务器架构师学习资料加qun获取(资料包括C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg等),免费分享
二、如何查看僵尸进程
可以利用top命令查看,效果如下,上文中创建的僵尸进程:
可以发现,我的服务器下只有一个僵尸进程。
也可以用ps -aux |grep Z来查看僵尸进程,效果如下:
僵尸进程的状态显示为Z
三、如何杀死僵尸进程
从僵尸进程的概念可以看出,是由于父进程未结束导致的。因此,我们可以通过杀死父进程来解决问题。所以,第一步要找到父进程 ps -ef | grep defunct_process_pid(僵尸进程pid),然后执行kill -s 9父进程的pid。演示如下:
可以看出,先找到僵尸进程的pid,我这里使用ps -aux |grep make是因为我的c文件是make开头的。然后在找到僵尸进程的父进程的pid 11781。
然后杀死 kill -s 9 11781。
检查一下是否杀死了僵尸进程。
执行top后得到的结果如下图:
没有僵尸进程了,已经被杀死了。