paip.杀不死进程的原因--僵尸进程的解决.txt
进程 解决 -- 原因 txt paip 僵尸
2023-09-14 09:03:38 时间
paip.杀不死进程的原因--僵尸进程的解决.txt
作者Attilax 艾龙, EMAIL:1466519819@qq.com
来源:attilax的专栏
地址:http://blog.csdn.net/attilax
1. 产生原因:
在UNIX 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他,那么他将变成一个僵尸进程。通过ps命令查看其带有defunct的标志。僵尸进程是一个早已死亡的进程,但在进程表(processs table)中仍占了一个位置(slot)。
但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程。因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程,看看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由Init进程来接管他,成为他的父进程,从而保证每个进程都会有一个父进程。而Init进程会自动wait其子进程,因此被Init接管的所有进程都不会变成僵尸进程。
一个进程在调用exit命令结束自己的生命的时候,其实它并没有真正的被销毁,而是留下一个称为僵尸进程(Zombie)的数据结构(系统调用exit,它的作用是使进程退出,但也仅仅限于将一个正常的进程变成一个僵尸进程,并不能将其完全销毁)。在Linux进程的状态中,僵尸进程
是非常特殊的一种,它已经放弃了几乎所有内存空间,没有任何可执行代码,也不能被调度,仅仅在进程列表中保留一个位置,记载该进程的退
出状态等信息供其他进程收集,除此之外,僵尸进程不再占有任何内存空间。它需要它的父进程来为它收尸...如果这时父进程结束了,那么init进程自动会接手这个子进程,为它收尸,它还是能被清除的。但是如果如果父进程是一个循环,不会结束,那么子进程就会一直保持僵尸状态,这就是为什么系统中有时会有很多的僵尸进程。
/为什么windows不会有僵尸进程??
创建进程的方式在Windows(CreateProcess)和Linux(Fork)下的差异还是有的,但是也不是完全不能统一,麻烦点的就是Windows没有僵尸进程的概念导致进程ID不能真正区别出一个进程,比如说一个ID100的进程关闭了,然后一个新的进程启动后ID为100,并且父子进程之间的联系比Linux下要弱的多。
进程之间相互独立;要进行等待需要显式写代码。
2.查看僵尸进程
top>> task (line)>> zombie..
3.清除僵尸进程:
把父进程杀掉。父进程死后,僵尸进程成为"孤儿进程",过继给1号进程init,init始终会负责清理僵尸进程.它产生的所有僵尸进程也跟着消失。
killall kill -15 kill -9
一般都不能杀掉 defunct进程.. 用了kill -15,kill -9以后 之后反而会多出更多的僵尸进程
4.kill
kill命令可以带信号号码选项,也可以不带。如果没有信号号码,kill命令就会发出终止信号(15)
//5.停止和重启进程
有时候只想简单的停止和重启进程。如下:
# kill -HUP PID
该命令让Linux和缓的执行进程关闭,然后立即重启。在配置应用程序的时候,这个命令很方便,在对配置文件修改后需要重启进程时就可以执行此命令。
参考
linux kill 关闭进程命令【转】 - 蝈蝈俊.net - 博客频道 - CSDN.NET.htm
作者Attilax 艾龙, EMAIL:1466519819@qq.com
来源:attilax的专栏
地址:http://blog.csdn.net/attilax
1. 产生原因:
在UNIX 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他,那么他将变成一个僵尸进程。通过ps命令查看其带有defunct的标志。僵尸进程是一个早已死亡的进程,但在进程表(processs table)中仍占了一个位置(slot)。
但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程。因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程,看看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由Init进程来接管他,成为他的父进程,从而保证每个进程都会有一个父进程。而Init进程会自动wait其子进程,因此被Init接管的所有进程都不会变成僵尸进程。
一个进程在调用exit命令结束自己的生命的时候,其实它并没有真正的被销毁,而是留下一个称为僵尸进程(Zombie)的数据结构(系统调用exit,它的作用是使进程退出,但也仅仅限于将一个正常的进程变成一个僵尸进程,并不能将其完全销毁)。在Linux进程的状态中,僵尸进程
是非常特殊的一种,它已经放弃了几乎所有内存空间,没有任何可执行代码,也不能被调度,仅仅在进程列表中保留一个位置,记载该进程的退
出状态等信息供其他进程收集,除此之外,僵尸进程不再占有任何内存空间。它需要它的父进程来为它收尸...如果这时父进程结束了,那么init进程自动会接手这个子进程,为它收尸,它还是能被清除的。但是如果如果父进程是一个循环,不会结束,那么子进程就会一直保持僵尸状态,这就是为什么系统中有时会有很多的僵尸进程。
/为什么windows不会有僵尸进程??
创建进程的方式在Windows(CreateProcess)和Linux(Fork)下的差异还是有的,但是也不是完全不能统一,麻烦点的就是Windows没有僵尸进程的概念导致进程ID不能真正区别出一个进程,比如说一个ID100的进程关闭了,然后一个新的进程启动后ID为100,并且父子进程之间的联系比Linux下要弱的多。
进程之间相互独立;要进行等待需要显式写代码。
2.查看僵尸进程
top>> task (line)>> zombie..
3.清除僵尸进程:
把父进程杀掉。父进程死后,僵尸进程成为"孤儿进程",过继给1号进程init,init始终会负责清理僵尸进程.它产生的所有僵尸进程也跟着消失。
killall kill -15 kill -9
一般都不能杀掉 defunct进程.. 用了kill -15,kill -9以后 之后反而会多出更多的僵尸进程
4.kill
kill命令可以带信号号码选项,也可以不带。如果没有信号号码,kill命令就会发出终止信号(15)
//5.停止和重启进程
有时候只想简单的停止和重启进程。如下:
# kill -HUP PID
该命令让Linux和缓的执行进程关闭,然后立即重启。在配置应用程序的时候,这个命令很方便,在对配置文件修改后需要重启进程时就可以执行此命令。
参考
linux kill 关闭进程命令【转】 - 蝈蝈俊.net - 博客频道 - CSDN.NET.htm
相关文章
- 作业调度和进程调度的辨析题_进程调度的功能有哪些
- python多进程编程-多进程编程中的异常处理(一)
- 一文带你了解LINUX查看进程的多种方法
- 解决linux系统中运行node进程却无法杀死进程的问题
- Linux下分配进程内存技巧(linux给进程分配内存)
- Linux下的不死之进程:永不灭绝的威力(linux杀不死的进程)
- 管理Linux进程:利用命令行(linux进程命令行)
- 解决Linux中的僵死进程(僵死进程linux)
- 解决Linux系统僵死进程的方法(linux僵死进程)
- 解决Oracle进程死锁问题的方法(oracle进程死锁)
- 终结Linux进程:把你的任务完成(linux终止进程)
- 问题解决Oracle Job进程挂起的挑战(oraclejob进程)
- 解决Oracle修改进程数的方法(oracle修改进程数)
- MSSQL 故障处理——解决1067进程(mssql 进程1067)
- 同时实现多个进程访问Redis(同时访问redis)
- 解决FastCGI进程超过了配置的活动超时时限的问题
- IIS6w3wp.exe进程占用cpu和内存过多的解决方法
- VC使用TerminateProcess结束进程实例