===========================================

defunct 进程只是在process

table里还有一个记录,其他的资源没有占用,除非你的系统的process个数的限制已经快超过了,zombie进程不会有更多的坏处。

可 能唯一的方法就是reboot系统可以消除zombie进程。

===========================================

任何程序都有僵尸状态,它占用一点内存资源(也就是进程表里还有一个记录),仅仅是表象而已不必害怕。如果程序有问题有机会遇

见,解决大批量僵尸简单有效的办法是重起。kill是无任何效果的

fork与zombie/defunct"

在Unix

下的一些进程的运作方式。当一个进程死亡时,它并不是完全的消失了。进程终止,它不再运行,但是还有一些残留的小东西等待父进程收回。这些残留的东西包括

子进程的返回值和其他的一些东西。当父进程 fork() 一个子进程后,它必须用 wait() 或者 waitpid()

等待子进程退出。正是这个 wait() 动作来让子进程的残留物消失。

自然的,在上述规则之外有个例外:父进程可以忽略 SIGCLD 软中断而不必要

wait()。可以这样做到(在支持它的系统上,比如Linux):

main()

{

signal(SIGCLD, SIG_IGN);

.

.

fork();

fork();

fork();

现在,子进程死亡 时父进程没有 wait(),通常用 ps 可以看到它被显示为“”。它将永远保持这样 直到 父进程

wait(),或者按以下方法处理。

这 里是你必须知道的另一个规则:当父进程在它wait()子进程之前死亡了(假定它没有忽略 SIGCLD),子进程将把 init(pid

1)进程作为它的父进程。如果子进程工作得很好并能够控制,这并不是问题。但如果子进程已经是

defunct,我们就有了一点小麻烦。看,原先的父进程不可能再 wait(),因为它已经消亡了。这样,init 怎么知道 wait()

这些 zombie 进程。

答案:不可预料的。在一些系统上,init周期性的破坏掉它所有的defunct进程。在另外一些系统中,它干

脆拒绝成为任何defunct进程的父进程,而是马上毁灭它们。如果你使用上述系统的一种,可以写一个简单的循环,用属于init的defunct进程填

满进程表。这大概不会令你的系统管理员很高兴吧?

你的任务:确定你的父进程不要忽略 SIGCLD,也不要 wait() 它 fork() 的所有进程。不过,你也未必 要

总是这样做(比如,你要起一个 daemon 或是别的什么东西),但是你必须小心编程,如果你是一个 fork()

的新手。另外,也不要在心理上有任何束缚。

总结:

子进程成为 defunct 直到父进程 wait(),除非父进程忽略了 SIGCLD 。

更进一步,父进程没有 wait() 就消亡(仍假设父进程没有忽略 SIGCLD )的子进程(活动的或者 defunct)成为 init

的子进程,init 用重手法处理它们。

linux 僵死日志,linux 僵死进程及处理相关推荐

  1. linux 高性能日志,linux日志系统

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 常见的日志 常见的日志一般存放在 /var/log 中,我们可以根据服务对象粗略的将日志分为两类系统日志 应用日志日志名 ...

  2. linux dprintk 日志,linux命令备忘

    2012-09-06 07:16 1234人阅读 评论(0) links -dump your.html html2txt lynx --dump your.html html2txt ldconfi ...

  3. linux 僵死日志,关于僵死进程

    首先介绍一下什么是僵死进程 int main() { int n = 0; char *s = NULL; pid_t pid = fork(); assert(pid != -1); if(pid ...

  4. linux postfix 日志,linux – 如何计算Postfix的mailq的消息?

    推荐文章 Wish me luck, I'm diving into JavaScript! As much as I want to start using JavaScript right awa ...

  5. linux mount 日志,Linux mount (第一部分)

    本篇将介绍一些比较实用的mount用法,包括挂载内核中的虚拟文件系统.loop device和bind mount. 下面的所有例子都在ubuntu-server-x86_64 16.04下执行通过 ...

  6. linux蓝牙日志,linux蓝牙

    linux蓝牙 (2008-12-30 17:20:07) 标签: 杂谈 为了将手机上的图片传送到笔记本电脑上,发现手机和笔记本电脑同时支持蓝牙. linux下蓝牙工具为bluez,包括bluez-u ...

  7. linux蓝牙日志,Linux下使用蓝牙(ZT)

    使用 爱立信T68i.索爱T628 与 Billionton USB Bluetooth Adapter 在Debian Kernel-2.6.0内核下测试通过. (本人购买的台产Billionton ...

  8. linux 擦 日志,linux日志清除脚本(擦屁股必备)

    使用方法: $0 options options有: -h 帮助 -i [ip]       查找在所有的日志文件特别IP_ADDRESS和搜索排名前20位的IP在日志文件中记录. -d [ip]   ...

  9. natepad怎么连linux看日志,linux添加用户操作日志

    1.把以下内容放至/etc/profile结尾(部分系统如CentOS 5.5可能需要放至/etc/bashrc结尾)HISTFILESIZE=2000 HISTSIZE=2000 export HI ...

最新文章

  1. canvas刮奖效果
  2. Android TextView文本处理库推荐
  3. 高效计算基础与线性分类器
  4. Java浅克隆与深克隆区别详解与实现,以及String类型属性克隆为什么不受影响?克隆clone()方法中为什么是super.clone()
  5. 40岁后学编程(1)
  6. 使用pushMeBaby后台测试远程推送
  7. 获取族_批量添加族参数(上)
  8. linux文件内容添加序号,nl命令将指定的各个文件添加行号编号序号标注后写到标准输出...
  9. android toast的使用
  10. ASP应用之模板采用
  11. Android内存泄漏分析及调试
  12. CSS自定义动画@keyframes的使用
  13. Everest 0.6不能保存3D桌面特效的解决方案
  14. linux系统中find怎么用,Linux系统中查找命令find的使用方法(一)
  15. 助您写出优雅的Java代码七点建议
  16. NOIP2013 试做总结
  17. Bongiovi DPS for Mac - 优秀的声音增强软件
  18. 需要两张图片合成一个PDF文件(两页)
  19. Windows cmd下载文件
  20. linux释放分区命令,Linux fdisk命令操作磁盘(添加、删除、转换分区等)

热门文章

  1. 苹果服务器维护2月25日,梦幻西游2口袋版2月25日定期维护公告
  2. 图嵌入前篇之词嵌入模型 Wrod2Vec
  3. Hbase---Compaction
  4. 使用textview显示html,使用 TextView 显示html页面
  5. 基于AS608与STC89C52的指纹密码锁
  6. Unity 分享 功能 用Unity Native Share Plugin 实现链接、图片、视频等文件的分享+ 安卓 Ios 都可以,代码图文详解
  7. 实践:动手搭建神经机器翻译模型
  8. catkin build 和 catkin_make
  9. [数字人]TTS(1)
  10. RAD Studio 10.4.1新的基于Chromium的Microsoft Edge浏览器的TEdgeBrowser控件用法