父进程为1号进程(ppid=1)的僵尸进程处理和分析
在做稳定性测试时,发现某进程日志停了,也没有退出日志,也没有别的,就一顿操作,然后把进程搞成了僵尸进程 defunct 。(疑似是 gdb attach 时,pkill -9 该线程了)
试着 kill 9 ppid 。僵尸进程的父进程变成了1,但是僵尸进程还存在。
搜了下,找到这篇文章《父进程为1号进程(ppid=1)的僵尸进程处理和分析》
那当出现父进程为1号进程的僵尸进程时,需要分析时,可以考虑上面几种情况;
1、查看下当前这个僵尸进程是否被其他进程使用,比如:被跟踪,调试之类的;
2、用ps -T -p 查看下这个僵尸进程的主线程是否退出;
3、用strace 跟踪下这个僵尸进程看看是否有io在等待,或者查看下载僵尸之前是否有io类的操作发生;
想到这个进程在变成僵尸进程前,用 gdb attatch 试图找到进程出现的问题。
那是不是因为 gdb 还在调试此进程呢,pkill 9 gdb,再 ps -ef | grep defunct | grep -v grep 发现此进程已经被回收。
具体的问题也没排查出来,桑心!
====================== 以下是原文 ======================
首先是 父进程为1号进程的进程 会不会成为僵尸进程??
---------------------------------------普通进程------------------------------------------
普通进程,父进程不主动去回收子进程的资源。
一个子进程在其父进程还没有调用wait()或waitpid()的情况下退出。这个子进程就是僵尸进程。产生僵尸进程的原因:
1、子进程结束后向父进程发出SIGCHLD信号,父进程默认忽略了它;
2、父进程没有调用wait()或waitpid()函数来等待子进程的结束;
处理办法:把父进程杀掉,僵尸进程会变成孤儿进程,然后过继给1号进程,而1号进程会扫描名下子进程,把 Z 状态进程回收;
这时候僵尸进程已经退出了,只保留了task_struct结构体,所以发信号(-9等信号)去处理僵尸进程是无效的;
-----------------------------------ppid=1的进程-------------------------------
通过对普通僵尸进程的分析,这样看起来好像 父进程为1号进程的进程 不会成为僵尸进程了,因为1号进程都会时刻扫描其子进程的状态。
发现是 僵尸进程就会马上去释放它的资源;
但是,父进程为1号进程的进程 其实也是有可能成为僵尸进程的。下面说几种情况:
1、进程还在被其它进程使用,退出;
2、进程的子线程还在执行任务,但主线程已经死掉了(可能主线程已经被杀了,systemd停止服务时会发SIGTERM信号);
3、进程阻塞在某一IO请求上,这时控制权已交到内核手上,这时如果子进程被KILL掉, 那么就成为父进程ID为1的僵尸进程,这个进程不会退出,会一直阻塞直到IO请求被满足;
那当出现父进程为1号进程的僵尸进程时,需要分析时,可以考虑上面几种情况;
1、查看下当前这个僵尸进程是否被其他进程使用,比如:被跟踪,调试之类的;
2、用ps -T -p 查看下这个僵尸进程的主线程是否退出;
3、用strace 跟踪下这个僵尸进程看看是否有io在等待,或者查看下载僵尸之前是否有io类的操作发生;
-------------------------------------------------我的bug分析--------------------------------------------------
我查看了下这个僵尸进程在变成僵尸之前的进程状态,发现开始是Ssl,然后变成了 tsl (我们有专门日志记录ps 进程列表的);
这里贴下进程的状态说明:
D 无法中断的休眠状态(通常 IO 的进程);
R 正在运行可中在队列中可过行的;
S 处于休眠状态;
T 停止或被追踪;
W 进入内存交换(从内核2.6开始无效);
X 死掉的进程(从来没见过);
Z 僵尸进程;
< 优先级高的进程
N 优先级较低的进程
L 有些页被锁进内存;
s 进程的领导者(在它之下有子进程);
l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads);
- 位于后台的进程组;
还有个重要的信息,在ps列表中有栏START信息,表示进程的启动时间,这个比较重要,可以看出进程是在哪天的什么时候起来的。
根据上面贴的进程状态信息,可以知道进程从休眠状态变了停止/被追踪,再根据开始说的 ppid=1的进程如果在被其他进程使用(跟踪调试等),则退出时,会有部分信息残留,导致变成僵死进程;(我觉得我就是这个情况orz)
那就比较容易处理了,首先查看下是什么时间点变成tsl状态的,那就说明这个时间点该进程被跟踪(不知道这是不是黑客中提到的反调试,反追踪)了,在这个时间点开始查找下看看有没有进程调试跟踪该僵尸进程;
-----------------------------补充句--------------------------------------
其实ppid=1的僵尸进程可以不用去管他,因为它迟早会被1号进程回收的(如果有很多僵尸进程除外)。
并且绝大部分ppid=1的僵尸进程是暂时的:
1、当进程被跟踪调试完,则会自动被回收掉的;
2、其他子线程组的线程执行完后会自动退出,僵尸进程会被回收;
3、这个可能会一直挂着,如果阻塞的io永远没有到达;
总之,遇到少量的僵尸进程,可以不需要特意的去处理,只需要查看下根源,看看是否有潜在的bug就可以;
(记得有种攻击方法就是创建很多僵尸进程,把进程列表占满,导致系统不能再创建进程)
若有错误,欢迎指正;
作者:庾志辉
来源:CSDN
原文:《父进程为1号进程(ppid=1)的僵尸进程处理和分析》
父进程为1号进程(ppid=1)的僵尸进程处理和分析相关推荐
- linux僵尸进程产生的原因以及如何避免产生僵尸进程defunct
给进程设置僵尸状态的目的是维护子进程的信息,以便父进程在以后某个时间获取.这些信息包括子进程的进程ID.终止状态以及资源利用信息(CPU时间,内存使用量等等).如果一个进程终止,而该进程有子进程处于僵 ...
- linux僵尸进程产生的原因以及如何避免产生僵尸进程
给进程设置僵尸状态的目的是维护子进程的信息,以便父进程在以后某个时间获取.这些信息包括子进程的进程ID.终止状态以及资源利用信息(CPU时间,内存使用量等等).如果一个进程终止,而该进程有子进程处于僵 ...
- fork()产生的子进程ppid有时不是父进程pid-Linux中的僵尸进程处理
文章首发及后续更新:https://mwhls.top/929.html 新的更新内容请到mwhls.top查看. 无图/无目录/格式错误/更多相关请到上方的文章首发页面查看. 写完之后,我想到了更严 ...
- linux一号进程和二号进程,Linux系统管理10——进程和计划任务管理(示例代码)
Linux系统管理10--进程和计划任务管理 一.程序和进程的关系 1.程序 ·保存在硬盘.光盘等介质中的可执行代码和数据 ·静态保存的代码 2.进程 ·在CPU及内存中运行的程序代码 ·动态执行的代 ...
- linux shell中清理僵尸进程
2019独角兽企业重金招聘Python工程师标准>>> 今天登录到服务器上时,系统打印有6 zombie processes存在,于是用kill -9去清理掉这些僵尸进程,命令执行完 ...
- 僵尸进程的产生与处理
什么是僵尸进程 僵尸进程是指它的父进程已经退出(父进程没有等待(调用wait/waitpid)它),而该进程dead之后没有进程接受,就成为僵尸进程,也就是(zombie)进程. 僵尸进程是怎么样产生 ...
- 函数wait、waitpid、孤儿进程、僵尸进程
一.函数wait.waitpid 一个进程在终止时会关闭所有文件描述符,释放在用户空间释放的内存,但它的PCB还保留着,内核在其中保存一些信息:如果是正常终止时则保存着退出状态,如果是异常终止则保存着 ...
- python僵尸进程和孤儿进程_Python Web学习笔记之并发编程的孤儿进程与僵尸进程...
1.前言 之前在看<unix环境高级编程>第八章进程时候,提到孤儿进程和僵尸进程,一直对这两个概念比较模糊.今天被人问到什么是孤儿进程和僵尸进程,会带来什么问题,怎么解决,我只停留在概念上 ...
- Linux 僵尸进程
Linux 允许进程查询内核以获得其父进程的 PID,或者其任何子进程的执行状态.例如,进程可以创建一个子进程来执行特定的任务,然后调用诸如 wait() 这样的一些库函数检查子进程是否终止.如果子进 ...
最新文章
- Cygwin鸡毛蒜皮
- 新视角带你认识Python可视化库(附代码资源)
- 在编写flash游戏播放声音时的一个要注意的地方
- 上海肯特选用Ultimus 提升企业管理
- 宾浪超.何飞玲.相爱(帮别人名字隔字作诗)
- NSIS安装制作程序
- [javascript]JS获取当前时间戳的方法
- linux下 安装tengine
- linux mysql 挂马_linux服务器被挂马
- WEB前后端交互原型通用元件库、常用组件、信息输出、信息输入、信息反馈、综合系列、页面交互、首页、分类页、内容详情、用户中心、注册登录、找回密码、元件库、web元件库、rplib、axure
- 5.9 亿国内用户简历遭殃,数据库持续“裸奔”!
- Ubuntu18.04安装MeshLab
- 2023年天津理工大学中环信息学院专升本机械设计考试大纲
- 谷歌浏览器如何自动运行flash
- html5 input的type属性启动数字输入法
- QT pro中加入文件拷贝方法
- ye lynn yama Loafer 已发送,请注意查收
- 【散文】 如果今生我是你梦中的蝴蝶
- ios html录制视频,iPhone怎么录屏?玩转iOS14自带屏幕录制功能全攻略
- 从NFA到DFA的转换
热门文章
- CoordinatorLayout+AppBarLayout+CollapsingToolbarLayout+Toolbar组合悬浮置顶的效果
- List 删除指定元素
- redis配置远程连接
- 去重(名字一样,找到年龄最大的)
- 智云通CRM:客户的成交过程就像“拍拖”到“结婚”?
- 马尔科夫链--维基百科
- Java手机忘了密码怎么办_忘记Linux密码怎么办
- Android加载Gif动画android-gif-drawable的使用
- WPF教程一:基础(转)
- 华为鸿蒙系统支持40w快充吗,华为发力,90Hz屏+7000mAh+鸿蒙OS,还支持40W快充!