linux僵尸进程
来源:互联网 发布:淘宝nike虎扑推荐店铺 编辑:程序博客网 时间:2024/05/16 19:10
定义
僵尸进程是指子进程退出时,父进程并未对其发出的SIGCHILD信号进行适当处理,导致子进程停留在僵尸状态等待其父进程为其收尸,这个状态下的子进程就是僵尸进程。
实例
#include<stdio.h>#include<stdlib.h>#include<error.h>int main(int argc,char *argv[]){ int pid,i; pid = fork(); switch(pid){ case 0: //子进程 printf("child start\n"); //睡眠10s sleep(10); printf("child end\n"); break; case -1: perror("fork failed\n"); break; default://父进程 printf("parent over\n"); } return 0; }
从上面的运行结果可以看出,父进程在子进程运行未结束前退出,导致子进程被int进程接管(此时父进程id变更为1)。待子进程运行接触后,子进程资源回被回收。
大约10秒后子进程被系统回收了,如下图:
解决方法
针对上面的情况,c语言提供了wait和waitpid方法,用于捕获子进程退出的信号,从而能有效地避免子进程出现“僵尸”状态的现象。
代码如下:
#include<stdio.h>#include<stdlib.h>#include<error.h>int main(int argc,char *argv[]){ int pid,i; pid = fork(); switch(pid){ case 0: printf("child start\n"); sleep(10); printf("child end\n"); break; case -1: perror("fork failed\n"); break; default: waitpid(pid, NULL, 0); printf("parent over\n"); } return 0; }
运行结果如下:
总结
在使用fork()创建子进程时,应尽量避免出现”僵尸进程”的情况。虽然子进程处于”僵尸”状态时,系统会将子进程交给init进程接管, 但此时子进程的占用资源并未得到释放。
0 0
- Linux--进程--僵尸进程
- linux中的。"僵尸"进程
- 关于linux 僵尸进程
- 关于linux 僵尸进程
- 关于linux 僵尸进程
- linux僵尸进程
- Linux僵尸进程
- Linux中的僵尸进程
- linux 僵尸进程
- linux 僵尸进程
- linux中的僵尸进程
- Linux的僵尸进程
- Linux 僵尸进程
- LInux中查杀僵尸进程
- linux僵尸进程
- Linux中僵尸进程
- Linux僵尸进程
- Linux Zombie 僵尸进程
- Solr文档学习--Documents, Fields, and Schema Design
- 推荐4个Android引导页控件
- treemap
- Android APK的生成流程
- java提取字符串中的中文
- linux僵尸进程
- iOS开发- 注释插件VVDocumenter-Xcode in Xcode8
- [数据结构]队列的操作
- 聊聊DHCP服务器
- uC/OS_ii操作系统心得
- leetcode ---- 143. Reorder List
- xcode snippet library
- 解决外网与内网或内网之间的通信,NAT穿透
- Android AndroidManifest.xml文件的android:supportsRtl属性详解