僵尸进程详解
来源:互联网 发布:阿里云香港主机建立ss 编辑:程序博客网 时间:2024/06/06 01:54
僵尸进程简介
“僵尸”进程是什么?通常情况下,造成僵尸进程的成因是因为该进程本应该已经执行完毕,但是该进程的父进程却无法完整的将该进程结束掉,而造成该进程一直存在于内存中。
那么如何查看一个进程是否为僵尸进程呢?
ps:将某个时间点的进程运行状态选取下来ps aux //查看系统所有的进程数据-A:所有的进程均显示出来-a:不与terminal有关的所有进程-u:有效用户相关的进程-x:通常与a一起使用,可以列出较完整的信息-l:较长、较详细地将该PID的信息列出
如图:
如上图
1、 F:进程标志,说明这个进程的权限,常见号码有:
若为4则代表权限为root
若为1则代表仅可被复制(fork),而无法实际执行(exec)
2、S:代表进程的状态
R ( Running):正在运行的进程
S(Sleeping):正在睡眠的进程,但可被唤醒
D:不可被唤醒的睡眠状态,一般都是在进行数据的I/O
T:停止状态
Z(Zombie):僵尸状态,进程已经终止但却无法被删除至内存外
也可以通过top指令来查看是否存在僵尸进程
top:动态查看进程的变化top:参数-d:后面接秒数,表示显示整个进程界面更新的秒数,如top -d 5-b:以批次的方式执行top-n:与-b搭配,意思是需要几次top输出的结果-p:指定某个特定的PID进行检测
如图:
光标处即目前的僵尸进程数量。
举例
这是一个维持30秒的僵尸进程
#include<stdlib.h>#include<stdio.h>int main(int argc,char** argv[]){ int id = fork(); if(id>0) { printf("Parent is sleeping\n"); sleep(30); } if(id == 0) printf("Child process is done\n"); exit(EXIT_SUCCESS);}
通俗一点,僵尸进程就是指子进程先于父进程挂掉 但是父进程并没有正确回收子进程的资源而已。
进程的管理
当你获知它是一个僵尸进程后,那么你该如何干掉它呢,那么首先就得了解一下进程的管理。
程序之间的相互管理,是通过给予一个信号来进行管理的
查看信号(signal):
1、man 7 signal
2、kill -l
通常情况下,我们只需记住几个特别重要的信号即可。
1:启动被终止的进程,可让该PID重新读取自己的配置文件
9:强制中段一个进程,如果该进程运行到一半(如vim)会产生.filename.swap的半产品文件
15:正常结束一个进程
18:继续运行该进程
19:暂停一个进程
例如,强行杀掉一个进程:
在实际情况下,如果我们有时无法直接杀掉一个僵尸进程,可以找到其父进程将其杀掉,从而干掉该僵尸进程。
总的来说,当系统不稳定时,或者代码不够完善,亦或是用户操作不当都可能产生僵尸进程,而僵尸进程是1个早已死亡的进程,但在进程表(processs table)中仍占了1个位置(slot)。由于进程表的容量是有限的,所以就占用了内存资源,影响系统性能。
- 僵尸进程详解
- Linux僵尸进程详解
- 僵尸进程详解
- 僵尸进程详解
- 孤儿进程和僵尸进程[详解]
- 孤儿进程和僵尸进程[详解]
- 孤儿进程和僵尸进程[详解]
- 详解僵尸进程与孤儿进程
- 详解僵尸进程和孤儿进程
- 孤儿进程和僵尸进程详解
- linux进程详解:fork进程、孤儿进程、僵尸进程
- 僵尸进程
- 僵尸进程
- 僵尸进程
- 僵尸进程
- 僵尸进程
- 僵尸进程
- 僵尸进程
- cURL开源库中的发送邮件示例代码(smtp-multi.c)
- Java源码——使用JFileChooser获取文件及目录信息(Obtain file and directory information)
- 工作流学习——Activiti流程定义管理三步曲
- 求100以内的素数的个数,并以每行显示5个数的方式打印出来
- Linux常用命令(一)之基础
- 僵尸进程详解
- 解决Ubuntu无法从外部应用启动Chrome打开链接的问题
- 各种面积的垃圾小程序
- 工作流学习——Activiti整体认识二步曲
- 程序员们,你们再这样下去会没朋友的。
- 博为峰JavaEE技术文章 —— Hibernate域模型(2)
- java复习——数组常见异常
- 工作流学习——重要概念扫盲篇一步曲
- HDU 1017 A Mathematical Curiosity 基础题 清晰的代码+详细注释