长期生活在 Linux

环境里,渐渐地就有一种环保意识油然而生。比如,我们会在登录提示里写上“悟空,我跟你说过叫你不要乱扔东西,乱扔东西是不对的。哎呀我话没说完你怎么把

棍子扔掉了?月光宝盒是宝物,乱扔它会污染环境,要是砸到小朋友怎么办?就算砸不到小朋友,砸到了花花草草也不好嘛...”;在用户缺省目录里放一个题为

“自觉保护环境 请勿堆放垃圾”的空文件,并用 chattr +i 设为不可修改;看到垃圾文件就立即扫入 /tmp

目录,然后发广播通知垃圾制造者自己去 /tmp

认领,且警告其下不为例...我们深知,系统环境的整洁有利于系统管理员保持良好的心情、清晰的思路和稳定的工作状态。

有一类垃圾却

并非这么容易打扫,那就是我们常见的状态为 D (Uninterruptible sleep) ,以及状态为 Z (Zombie)

的垃圾进程。这些垃圾进程要么是求而不得,像怨妇一般等待资源(D),要么是僵而不死,像冤魂一样等待超度(Z),它们在 CPU run_queue

里滞留不去,把 Load Average

弄的老高老高,没看过我前一篇blog的国际友人还以为这儿民怨沸腾又出了什么大事呢。怎么办?开枪!kill

-9!看你们走是不走。但这两种垃圾进程偏偏是刀枪不入的,不管换哪种枪法都杀不掉它们。无奈,只好reboot,像剿灭禽流感那样不分青红皂白地一律扑

杀!

悟空,我们所运维的可是24*7全天候对外部客户服务的系统,怎么能动不动就 reboot

?我们的考核指标可是4个9(99.99%,全年计划外当机时间不得超过52分钟34秒),又不是4个8,你稍微遇到点事就reboot,还要不要可用性

了?再说,现在社会都开始奔和谐去了,我们对于 D 和 Z

这两种垃圾进程,也该尽可能采取慈悲手段,能解决其困难的,就创造条件,解决其实际困难,能消除其冤结的,就诵经烧纸,消除其前世冤结,具体问题应具体分

析具体解决,滥杀无辜只会导致冤冤相报因果循环...$^#$%#%^@#

贫僧还是回来说正题。怨妇 D,往往是由于 I/O 资源得不到满足,而引发等待,在内核源码

fs/proc/array.c 里,其文字定义为“ "D (disk sleep)", /* 2 */ ”(由此可知 D

原是Disk的打头字母),对应着 include/linux/sched.h 里的“ #define TASK_UNINTERRUPTIBLE 2

”。举个例子,当 NFS 服务端关闭之时,若未事先 umount 相关目录,在 NFS 客户端执行 df 就会挂住整个登录会话,按

Ctrl+C 、Ctrl+Z 都无济于事。断开连接再登录,执行 ps axf 则看到刚才的 df 进程状态位已变成了 D ,kill -9

无法杀灭。正确的处理方式,是马上恢复 NFS 服务端,再度提供服务,刚才挂起的 df 进程发现了其苦苦等待的资源,便完成任务,自动消亡。若

NFS 服务端无法恢复服务,在 reboot 之前也应将 /etc/mtab 里的相关 NFS mount 项删除,以免 reboot

过程例行调用 netfs stop 时再次发生等待资源,导致系统重启过程挂起。

冤魂 Z

之所以杀不死,是因为它已经死了,否则怎么叫

Zombie(僵尸)呢?冤魂不散,自然是生前有结未解之故。在UNIX/Linux中,每个进程都有一个父进程,进程号叫PID(Process

ID),相应地,父进程号就叫PPID(Parent

PID)。当进程死亡时,它会自动关闭已打开的文件,舍弃已占用的内存、交换空间等等系统资源,然后向其父进程返回一个退出状态值,报告死讯。如果程序有

bug,就会在这最后一步出问题。儿子说我死了,老子却没听见,没有及时收棺入殓,儿子便成了僵尸。在UNIX/Linux中消灭僵尸的手段比较残忍,执

行 ps axjf 找出僵尸进程的父进程号(PPID,第一列),先杀其父,然后再由进程天子

init(其PID为1,PPID为0)来一起收拾父子僵尸,超度亡魂,往生极乐。注意,子进程变成僵尸只是碍眼而已,并不碍事,如果僵尸的父进程当前有

要务在身,则千万不可贸然杀之。

关于ZOMBIE进程:这些进程已经死亡,但没有释放系统资源,包括内存和一些一些系统表等,如果这样的进程很多,会引发系统问题。用ps -el看出的进程状态如果是Z,就是僵尸进程。

ps -ef|grep defunc可以找出僵尸进程.

些ZOMBIE进程时用kill -9也不能杀死,而且消耗了很多系统资源不能释放,如果系统在shutdown时发出信息:some process

wouldn’t die. 这就意味这有些进程不能被reboot发出的kill –9杀掉,这些很可能就是僵尸进程。

可以用ps 的 – l 选项,得到更详细的进程信息.

F(Flag):一系列数字的和,表示进程的当前状态。这些数字的含义为:

00:若单独显示,表示此进程已被终止。

01:进程是核心进程的一部分,常驻于系统主存。如:    sched、 vhand 、bdflush 等。

02:Parent is tracing process.

04 :Tracing parent's signal has stopped the process; the parent is waiting ( ptrace(S)).

10:进程在优先级低于或等于25时,进入休眠状态,而且不能用信号唤醒,例如在等待一个inode被创建时

20:进程被装入主存(primary memory)

40:进程被锁在主存,在事务完成前不能被置换   e

S(state of? the process )

O:进程正在处理器运行

S:休眠状态(sleeping)

R:等待运行(runable)

I:空闲状态(idle)

Z:僵尸状态(zombie)

T:跟踪状态(Traced)

B:进程正在等待更多的内存页

C(cpu usage):cpu利用率的估算值

清除ZOMBIE(僵尸)进程可以使用如下方法:

1> kill –18 PPID (PPID是其父进程)

这个信号是告诉父进程,该子进程已经死亡了,请收回分配给他的资源。

2>如果不行则看能否终止其父进程(如果其父进程不需要的话)。先看其父进程又无其他子进程,如果有,可能需要先kill其他子进程,也就是兄弟进程。方法是:

kill –15 PID1 PID2(PID1,PID2是僵尸进程的父进程的其它子进程)。

然后再kill父进程:kill –15 PPID

这样僵尸进程就可能被完全杀掉了。

linux进程d和z的转换,linux进程状态D和Z的处理 (转)相关推荐

  1. 在Linux系统下实现进程,Linux进程学习(一)之Linux进程的基本知识和实现

    最近一周学习了Linux 进程编程的知识,现对其总结如下. 在第一部分中我们先对进程的基本概念以及在Linux 中是如何来现实进程的进行介绍 Tiger-John说明 : 许多人在学习中只注重如何编程 ...

  2. linux 进程的fg,36.每日一个Linux命令----先后台进程切换(fg、bg、jobs、)

    描述:fg 和 bg 命令是进程的先后台调度命令.linux 操做:shell Ctrl + c 终止并退出当前前台命令的执行,回到shellgoogle Ctrl + z 暂停前台命令,将该进程放入 ...

  3. linux 进程可以把自己,如何将Linux进程小隐于用户?仅仅一行代码即可

    总有朋友问隐藏Linux进程的方法,我说你想隐藏到什么程度,是大隐于内核,还是小隐于用户.网上通篇论述的无外乎 hook 掉 procfs 或者类似的用户态方案,也都难免长篇大论,我说,这些场面都太大 ...

  4. Linux进程调度策略的发展和演变--Linux进程的管理与调度(十六)

    日期 内核版本 架构 作者 GitHub CSDN 2016-06-14 Linux-4.6 X86 & arm gatieme LinuxDeviceDrivers Linux进程管理与调度 ...

  5. linux进程跑飞了,【Shell】Linux信号(二)

    [信号产生] bash shell允许用键盘上的键组合生成两种基本的Linux信号,这个在你需要停止或暂停跑飞了的程序时就能派上用场. 终止进程 Ctrl+C组合键会生成SIGINT信号,并将其发送给 ...

  6. linux进程卡住_鸿蒙系统,Linux? Android?

    昨日(2020.9.10),在华为开发者大会2020上,华为宣布推出鸿蒙OS2.0版本(HarmonyOS 2.0),并且将其开源,代码捐赠给开放原子开源基金会. 笔者带大家进入开源社区,看看鸿蒙的神 ...

  7. linux进程中对信号的屏蔽,linux进程中的信号屏蔽

    在linux的进程中可以接收到各种的信号,并且如果你不对信号进行处理,linux中的进程就会采用默认的处理方式处理,比如ctrl-c的信号,进程对它的处理就是终止进程的执行. 在linux中,我们也可 ...

  8. linux进程映像由哪些构成,Linux编程开发进程映像类型分析

    进程与线程问题是程序员在学习编程开发语言需要重点掌握的编程知识之一,而今天我们就一起来了解一下,Linux编程开发中进程映像的执行标准. 什么是进程映像呢?进程映像是执行程序时所需要的可执行文件,通常 ...

  9. linux进程号为一,一步步探究linux进程中的用户ID

    转载请注明来源chengyaogen.blog.chinaunix.net 一.进程与权限 A.进程时Linux/Unix操作系统中最重要的抽象之一 B.进程是一个处于执行期的程序(目标代码存储在某种 ...

最新文章

  1. matlab gui数据类型,MatLab GUI 数据传递
  2. Linux其实没那么难学
  3. SAP UI5 初学者教程之十七 - 聚合绑定在 UI5 复合控件中的使用试读版
  4. android canvas_Android 如何实现气泡选择动画
  5. CSS 小结笔记之文字溢出处理
  6. 41岁,她破格提拔为高校副校长
  7. 函数型F#语言很值得学习
  8. java 神经网络算法_70行Java代码实现深度神经网络算法分享
  9. 基于SSM的图书商城的设计与实现(文末附源码)
  10. 两张图片放在一起有条白线_用photoshop对两幅图无缝拼接后,怎么消除接口那条明显的线?...
  11. 复杂句变简单句 java_【SAT写作】简单句如何变为复杂句?10招教你快速转变
  12. 查看服务器的并发访问量以及访问的IP地址
  13. 云控系统机房搭建为什么用到网络交换机?
  14. 用 OpenCV 检测图像中各物体大小
  15. 采购关税及税相关配置
  16. ArrayList一边遍历一边删除?给大家介绍几种方法
  17. 第三代总线技术迈向2.5G SDH(转)
  18. 一、CentOS7.4下Elastic Stack 6.2.4日志系统搭建
  19. 商家编号_doc_010简洁的简历模板word格式
  20. 卡尔曼转矩观测_基于扩展卡尔曼滤波器的表贴式永磁同步电机负载转矩观测方法与流程...

热门文章

  1. mysql安装图解_mysql 安装图解 mysql图文安装教程(详细说明)
  2. 深入探索 Android 网络优化(二、网络优化基础篇)下
  3. 虚幻3载具(Vehicle)轮胎模型
  4. tcache attacke
  5. 《洛杉矶之战》影评:真人版的合金弹头
  6. 【MySQL】 1171 错误
  7. 论文笔记:Ontology-enhanced Prompt-tuning for Few-shot Learning
  8. Project——唇部试妆
  9. Oracle GoldenGate概述
  10. 我的世界服务器无限刷铁轨,我的世界红石技巧无限刷轨机 两个铁轨还你无限铁轨...