Linux之僵尸进程
来源:互联网 发布:武藏点胶机200s编程 编辑:程序博客网 时间:2024/04/29 23:03
* 僵尸进程
子进程结束,父进程没有正确处理子进程返回信息。
PS:直到父进程退出,子进程变为孤儿进程,其父进程会变为Init进程(PPID=0),Init进程会负责清理僵尸进程
* 危害
僵尸进程没有从进程列表删除,占据内核资源
* 结论
多进程编程,父进程需要跟踪子进程的退出状态
* 僵尸进程查看方法:
1 top (zombie数量)
Tasks: 581 total, 1 running, 574 sleeping, 5 stopped,1 zombie
2 ps -ef (defunct标记)
1022 16123 16122 0 11:32 pts/12 00:00:00 [a.out]<defunct>
* 僵尸进程处理方法:
当子进程结束,其会给父进程发送SIGCHLD信号。
这时父进程捕获信号后可调用wait()或者waitpid()函数回收子进程尸体
1 pid_t wait (int * status);
2 pid_t waitpid(pid_t pid,int * status,int options);
PS:使用waitpid就够了,其为wait提供非阻塞功能
PS:也可简单使用signal(SIGCHLD,SIG_IGN);这时内核在子进程结束不会产生僵尸进程
* 编程例子
* 其他补充
PS:子进程未结束,而父进程先结束了,子进程PPID变为0(Init进程)。这时ps -ef子进程并不是僵尸态
gapp_devnet_1:~ # ps -ef | grep 18849
UID PID PPID C STIME TTY TIME CMD
1022 18849 1 0 11:35 pts/12 00:00:00 ./a.out
子进程结束,父进程没有正确处理子进程返回信息。
PS:直到父进程退出,子进程变为孤儿进程,其父进程会变为Init进程(PPID=0),Init进程会负责清理僵尸进程
* 危害
僵尸进程没有从进程列表删除,占据内核资源
* 结论
多进程编程,父进程需要跟踪子进程的退出状态
* 僵尸进程查看方法:
1 top (zombie数量)
Tasks: 581 total, 1 running, 574 sleeping, 5 stopped,1 zombie
2 ps -ef (defunct标记)
1022 16123 16122 0 11:32 pts/12 00:00:00 [a.out]<defunct>
* 僵尸进程处理方法:
当子进程结束,其会给父进程发送SIGCHLD信号。
这时父进程捕获信号后可调用wait()或者waitpid()函数回收子进程尸体
1 pid_t wait (int * status);
2 pid_t waitpid(pid_t pid,int * status,int options);
PS:使用waitpid就够了,其为wait提供非阻塞功能
PS:也可简单使用signal(SIGCHLD,SIG_IGN);这时内核在子进程结束不会产生僵尸进程
* 编程例子
#include <iostream>#include <stdlib.h>#include <sys/types.h>#include <sys/wait.h>using namespace std;void OnSigChild(int iSig){ pid_t iPid; int iStat; while ((iPid = waitpid(-1, &iStat, WNOHANG)) > 0) { cout << "<OnSigChild>, Pid=" << iPid << endl; }}int main(){ signal(SIGCHLD, OnSigChild); if (!fork()) { // Child cout << "Child:" << getpid() << endl; exit(0); } // Parent while(1); return 0;}
* 其他补充
PS:子进程未结束,而父进程先结束了,子进程PPID变为0(Init进程)。这时ps -ef子进程并不是僵尸态
gapp_devnet_1:~ # ps -ef | grep 18849
UID PID PPID C STIME TTY TIME CMD
1022 18849 1 0 11:35 pts/12 00:00:00 ./a.out
1 0
- Linux之僵尸进程
- Linux -- 进程管理之僵尸进程
- linux之僵尸进程、孤儿进程
- Linux内核源码学习之僵尸进程
- Linux--进程--僵尸进程
- Linux进程之僵尸进程和孤儿进程简析
- linux 进程之僵尸进程与孤儿进程
- Linux之僵尸进程和孤儿进程【总结】
- linux学习之十一---孤儿进程与僵尸进程
- Linux系统编程——特殊进程之僵尸进程
- Linux系统编程——特殊进程之僵尸进程
- Linux系统编程——特殊进程之僵尸进程
- 【Linux系统编程】特殊进程之僵尸进程
- linux c之孤儿进程与僵尸进程[总结]
- Linux系统编程——特殊进程之僵尸进程
- Linux系统编程——特殊进程之僵尸进程
- 【Linux应用开发】之孤儿进程和僵尸进程
- Linux系统编程——特殊进程之僵尸进程
- 检测表和存储过程等对象是否存在的方法总结
- Gerrit 与 Jenkins 集成配置的最快上手一站式说明(2014年新版)
- 职场中尽量不要从一而终
- 在Oracle Linux 5.9上安装Oracle Enterprise Manager Cloud Control 12cR3
- expdp/impdp 详细参数解释
- Linux之僵尸进程
- some command(to be added)
- Codeforces 392A Blocked Points(暴力)
- 网页素材 js和 jquery
- 2107 图的深度遍历
- Android 中 有关Button的几个小点
- STL中List的实现分析
- android正则匹配账号密码信息
- oracle 如何导出数据字典