Linux僵尸进程:如何避免并处理? (linux zombie)

Linux操作系统是一个强大的操作系统,它能够运行多个进程,在处理器资源有限的情况下,进行进程管理是必不可少的。然而,Linux系统中常常出现的一个问题就是僵尸进程,它会占用系统资源并导致系统性能下降。本文将介绍僵尸进程的概念、原因、如何避免以及如何处理。

一、什么是Linux僵尸进程?

在Linux系统中,当一个进程终止后,该进程不会被立即删除,而是留下一些信息供其父进程检查该进程的退出状态。这时候,该进程被称为“僵尸进程”。僵尸进程是一种处于“半死状态”的进程,它不会占用CPU资源,但会占用系统的进程表等资源。

二、Linux僵尸进程的原因

出现僵尸进程的原因有很多,以下是一些常见的原因:

1. 父进程没有处理子进程的退出状态码。当一个子进程结束时,Kernel会向父进程发送一个信号(SIGCHLD),告诉父进程该子进程已经结束。如果父进程没有处理这个信号,那么子进程就会成为僵尸进程。

2. 父进程没有正确地调用wt函数。wt函数是用来等待子进程退出的函数。当一个子进程退出时,Kernel会把子进程的退出状态码和一些其他信息保存在内核等待队列中,等待父进程来调用wt函数来取出这些信息。如果父进程没有调用wt函数,那么子进程就会成为僵尸进程。

3. 系统资源不足。当系统资源不足的时候,发生什么情况,什么程序可以执行,什么程序不能执行?

三、如何避免Linux僵尸进程的出现

1. 合理地编写程序,正确处理信号。程序员应该注意处理信号,在子进程结束时及时地处理SIGCHLD信号,避免出现僵尸进程。

2. 父进程调用wt函数。父进程在创建子进程时可以设置wt参数,这样子进程结束后会自动调用wt函数来处理退出状态码等信息。

3. 使用守护进程。守护进程是一种长时间运行的进程,通常用于在后台运行服务。它不会受到用户退出的影响,因此很少会出现僵尸进程的问题。

四、如何处理Linux僵尸进程

1. 通过ps命令查看僵尸进程。在终端中输入命令ps -A -ostat,ppid,pid,cmd | grep -e ‘^Z’可以查看当前系统中所有的僵尸进程。

2. 使用kill命令结束僵尸进程。在终端中输入命令kill -9 可以结束指定进程的运行。

3. 编写脚本清除多个僵尸进程。可以编写脚本来批量清除多个僵尸进程,具体操作可以参考脚本如下:

#!/bin/bash

for pid in $(ps -A -ostat,ppid,pid,cmd | grep -e ‘^Z’ | grep -v ‘grep’ | awk ‘{print $2}’) do

kill -9 $pid done

相关问题拓展阅读:

linux下 top中的d怎么半

在linux下可以通过top命令来查系统运行状态和进程运行状态,通过man查看top手册,top的解释是display Linux tasks,以前看到过一个另外的解释display top CPU processes,这个我觉得挺贴切的,因为top这个命令会自动把消耗高的进慎迅迟程排到前面,真的很形象。

1、命令说明

top 参数

-h:help表示显示帮助的意思

-v:version显示版本的意思,和-h的功能一样

-u:user显示指定用户的进程,例如:top -u root

-p:pid显示指定进程,例如:top -p 1

-n:number进入top后,top会定时刷新状态,这个值就是设置刷新几次

-d:delay进入top后,top会定时刷新状态,这个值就是设置几秒刷新一次

-b:Batch mode,top刷新状态默认是在原数据上刷新,使用这个参数后,会一屏一屏的显示数据。结合重定向功能和计划任务,这个参数在记录服务器运行状态时非常有用。

以上一些参数是在输入命令时提供的参数,在top运行的过程中,还可以输入一些快捷键来调整显示内容。

一些命令运行时的快捷键说明:

q:quit退出程序

M:Memory按照内存使用量排序

P:CPU按照cpu使用量排序

k:kill杀死PID的进程,不输入PID,直接按回车就会退出

1:能显示CPU每个核心的情况

h或者?:help 查看更多快捷键

f:fields查看进程表头字段含义

2、命令测试

top

top命令测试

之一行说明:

top – :系统当前时间

up:服务器连续运行的时间,笔者见过有服务器连续运行一年以上,linux服务器还是非常稳定的。

user:当前有多少用户登录系统

load average:这个边有3个数值分别表示系统在前1分钟,5分钟,15分钟的工作负载,根据笔者以往的经验来看单核负载在3-5之间比较合适,经常在1以下,说明cpu利用率不高,在5以上,cpu会处于较高负载状态,会容易宕机。有一次项目上线,晚上加班观察服务器状况,这个值长时间保持在72左右,因为服务器有八核,所以每核的值为9,后来服务器就挂了。

第二行就是显示任务的数量情况,其中zombie要注意一下,这个是表示僵尸进程,出现了僵尸进程要注意下僵尸进程是如何产生的。如果不找到产生原因,即使杀死了,可能也会再次出现。

第三行表示cpu的运行情况,按下1可以显示每个核的运行情况。

第四行表示内存memory的使用情况。

第五行表示交换空间swap的使用情况。

下面显示的就是进程的运行状态了。每个表头表示的含义如下:

PID:进程编号

USER:进程所属用户

PR/NI:Priority/Nice value进程执行的优先顺序

VIRT:Virtual Image (kb) 虚拟内存使用总额

RES:Resident size (kb) 常驻内存

SHR:Shared Mem size (kb) 共享内存

S:Process Status 进程状态

%CPU:cpu使用率

%MEM:内存使用率

TIME+:进程开始运行时使用cpu的总时间

COMMAND:进程运行的命令

在top状态下按f可以查看表头字段说明。

3、常用的命令:

top -b -n 60 -d 60 > /home/cpu.txt

该命令每隔60秒会将服务器运行状宽李态保存到一个文本文件,昌好共运行60次,其实就是将服务器1个小时的运行状态保存起来。使用这个命令,可以记录服务器在繁忙时的负载情况,例如设置到晚上8点到9点之间,这样就可以根据服务器状态作出调整,而不是等服务器挂了才来处理。上面命令各参数,大家可以根据自己需要修改。终于不用加班蹲点观察服务器了。

linux的ps命令

和top里面是有明粗Ss的

man了一下激卜镇 ps和top

解释如下

PROCESS STATE CODES

Here are the different values that the s, stat and state output specifiers

(header “STAT” or “S”弊扰) will display to describe the state of a process.

D Uninterruptible sleep (usually IO)

R Running or runnable (on run queue)

S Interruptible sleep (waiting for an event to complete)

T Stopped, either by a job control signal or because it is being traced.

W paging (not valid since the 2.6.xx kernel)

X dead (should never be seen)

Z Defunct (“zombie”) process, terminated but not reaped by its parent.

For BSD formats and when the stat keyword is used, additional characters may

be displayed:

列出指定命令的状况

  –lines 每页显示的行数

  –width 每页显示的字符数

  –help 显示帮助信息

  –version 显示版本显示

linux命令ps详解:

使用权限:所有使用者(用户)

使用方式:ps

说冲返戚明:显示瞬间行程 (process) 的动态

参数:ps的参数非常多, 在此仅列出几个常用的参数并大略介绍含义

-A    列出所有的进程

-w    显示加宽可以显示较多的资讯

-au    显示较详细的资讯

-aux    显示所有包含其他使用者的行程

常用参数:

-A 显示所有进程(等价于-e)(utility)

-a 显示一个终端的所有进程,除了会话引线

-N 忽略选择。

-d 显示所有进程,但省略所有的会话引线(utility)

-x 显示没有控制终端的进程,同时显示各个命令的具体路径。dx不可合用(utility)

-p pid 进程使用cpu的时间

-u uid or username 选择有效的用户id或者是用户名

-g gid or groupname 显示组的所有进程。

U username 显示该用户下的所有进程,且显示各个命令的详细路径

-f 全部列出,通常和其他选项联用。如:ps -fa or ps -fx and so on

-l 长格式(有F,wchan,C 等字段)

-j 作业格式

-o 用户自定义格式

v 以虚拟存储器格式显示

s 以信号格式显示

-m 显示所有的线程

-H 显示进程的层次(和其它的命令合用

e 命令之后显示环境

h 不显示之一行

最常用的方法是ps -aux,然后再ps命令常用用法(方便查看系统进程)

1)ps a 显示现行终端机下的所有程序,包括其他用户的程序

2)ps -A 显示所有进程

3)ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示

4)ps -e 此参数的效果和指定”A”参数相同

5)ps e 列出程序时,显示每个程序所使用的环境变量

6)ps f 用ASCII字符显示树状结构,表达程序间的相互关系

7)ps -H 显示树状结构,表示程序间的相互关系

8)ps -N 显示所有的程序,除了执行ps指令终机下的程世枣序之外

9)ps s 采用程序信号的格式显示程序状况

10)ps S 列出程序时,包括已中断的子程序资料

11)ps -t  指定终端机编号,并列出属于该终端机的程序的状况

12)ps u  以用户为主的格式来显示程序状况

13)ps x  显示所有程序,不散陵以终端机来区分

最常用的方法是ps -aux,然后再利用一个管道符号导向到grep去查找特定的进程,然后再对特定的进程进行操作。利用一个管道符号导向到grep去查找特定的进程,然后再对特定的进程进行操作。

ps默认只会显示缺森当前终大逗端下的进程,加上-l参数,只是进程的显示资料更伏仿亩详细些,不会显示更多的进程,详细内容可以查看:

ps -aux

linux zombie的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux zombie,Linux僵尸进程:如何避免并处理?,linux下 top中的d怎么半,linux的ps命令的信息别忘了在本站进行查找喔。


数据运维技术 » Linux僵尸进程:如何避免并处理? (linux zombie)