僵尸进程
来源:互联网 发布:网易大数据平台 编辑:程序博客网 时间:2024/05/05 10:46
# ps -auxroot 6479 1 0 11:24 ? 00:01:52 [xxx] <defunct>
产生:
一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他, 那么他将变成一个僵尸进程
但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程, 因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程, 看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由Init 来接管他,成为他的父进程
危害:
在每个进程退出的时候,内核释放该进程所有的资源,包括打开的文件,占用的内存等。但是仍然为其保留一定的信息(包括进程号the process ID,退出状态the termination status of the process,运行时间the amount of CPU time taken by the process等)。直到父进程通过wait / waitpid来取时才释放
避免:
- 父进程通过wait和waitpid等函数等待子进程结束,这会导致父进程挂起
- 如果父进程很忙,那么可以用signal函数为SIGCHLD安装handler,因为子进程结束后, 父进程会收到该信号,可以在handler中调用wait回收
- 如果父进程不关心子进程什么时候结束,那么可以用signal(SIGCHLD,SIG_IGN) 通知内核,自己对子进程的结束不感兴趣,那么子进程结束后,内核会回收, 并不再给父进程发送信号
- 还有一些技巧,就是fork两次,父进程fork一个子进程,然后继续工作,子进程fork一 个孙进程后退出,那么孙进程被init接管,孙进程结束后,init会回收。不过子进程的回收 还要自己做
详见:百科
0 0
- 僵尸进程
- 僵尸进程
- 僵尸进程
- 僵尸进程
- 僵尸进程
- 僵尸进程
- 僵尸进程
- 僵尸进程
- 僵尸进程
- 僵尸进程
- 僵尸进程
- 僵尸进程
- 僵尸进程
- 僵尸进程
- 僵尸进程
- 僵尸进程
- 僵尸进程
- 僵尸进程
- Linux的Shell编程 Shell基本语法
- 延长SparkContext初始化时间
- iOS沙盒机制
- 安卓activity和fragment之间切换动作--左右滑动的效果
- html5实现弹出提示框,并且伴随遮罩层并且可以关闭弹出框
- 僵尸进程
- 大数求和
- iOS越狱包
- python+Eclipse+pydev环境搭建
- PHP 数组排序内置函数
- Excel Sheet Column Title
- 10个最好用的在线编译/调试工具
- [leetcode] 82.Remove Duplicates from Sorted List II
- MapReduce错误处理,任务调度及Shuffle过程