关于僵尸进程
来源:互联网 发布:java企业人事管理系统 编辑:程序博客网 时间:2024/06/06 01:37
在fork ()/execve()过程中,假设子进程结束时父进程仍存在,而父进程fork()之前既没安装SIGCHLD信号处理函数调用waitpid()等待子进程结束,又没有显式忽略该信号,则子进程成为僵尸进程,无法正常结束,此时即使是root身份kill -9也不能杀死僵尸进程。补救办法是杀死僵尸进程的父进程(僵尸进程的父进程必然存在),僵尸进程成为"孤儿进程",过继给1号进程init,init始终会负责清理僵尸进程。
僵尸进程的避免:
(1) 父进程通过wait和waitpid等函数等待子进程结束,这会导致父进程挂起。
(2) 如果父进程很忙,那么可以用signal函数为SIGCHLD安装handler,因为子进程结束后, 父进程会收到该信号,可以在handler中调用wait回收。
(3) 如果父进程不关心子进程什么时候结束,那么可以用signal(SIGCHLD, SIG_IGN) 通知内核,自己对子进程的结束不感兴趣,那么子进程结束后,内核会回收, 并不再给父进程发送信号。
(4) 还有一些技巧,就是fork两次,父进程fork一个子进程,然后继续工作,子进程fork一 个孙进程后退出,那么孙进程被init接管,孙进程结束后,init会回收。不过子进程的回收 还要自己做。
僵尸进程的避免:
(1) 父进程通过wait和waitpid等函数等待子进程结束,这会导致父进程挂起。
(2) 如果父进程很忙,那么可以用signal函数为SIGCHLD安装handler,因为子进程结束后, 父进程会收到该信号,可以在handler中调用wait回收。
(3) 如果父进程不关心子进程什么时候结束,那么可以用signal(SIGCHLD, SIG_IGN) 通知内核,自己对子进程的结束不感兴趣,那么子进程结束后,内核会回收, 并不再给父进程发送信号。
(4) 还有一些技巧,就是fork两次,父进程fork一个子进程,然后继续工作,子进程fork一 个孙进程后退出,那么孙进程被init接管,孙进程结束后,init会回收。不过子进程的回收 还要自己做。
0 0
- 关于linux 僵尸进程
- 关于linux 僵尸进程
- 关于僵尸进程
- 关于linux 僵尸进程
- 关于linux 僵尸进程
- 关于僵尸进程
- 关于僵尸进程
- [转]关于linux 僵尸进程
- 关于僵尸进程和孤儿进程
- 关于僵尸进程的深度解析
- [李景山php] 关于父进程 僵尸进程 init 进程
- 僵尸进程
- 僵尸进程
- 僵尸进程
- 僵尸进程
- 僵尸进程
- 僵尸进程
- 僵尸进程
- 草间弥生——我的一个梦想 A DREAM I DREAMED
- Android拍照,上传,预览综合【修改】
- ArcGIS Desktop 与 Excel
- Git详解之一 Git起步
- 通过 ANE(Adobe Native Extension) 启动Andriod服务 推送消息(一)
- 关于僵尸进程
- cocos2dx 3.0 微信打飞机--002
- Google之Protocol Buffer序列化学习(一)
- SQLServer Transparent Data Encryption
- socket编程基础3(和TCP/IP的关系)
- JavaScript CSS Style属性对照表
- 通过 ANE(Adobe Native Extension) 启动Andriod服务 推送消息(二)
- CI框架全局防止SQL注入(防止XSS攻击)的方法
- 关于页面嵌入swf覆盖div层的问题