避免linux系统调用fork后产生僵死进程
来源:互联网 发布:matlab 遗传算法 袋鼠 编辑:程序博客网 时间:2024/05/22 13:10
僵尸进程 就是 已经结束,但是还没有清理出去的.用kill -9 $PID 也无法杀死.
所以程序中应该避免出现僵尸进程.
用fork之后,父进程如果没有wait /waitpid 等待子进程的话,子进程完毕后,就成了僵尸进程.
但是父进程如果等待wait/waitpid的话,就没法干别的事情了...尤其在多个子进程的情况下.所以 中断 信号量 是一个好办法:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/types.h>
void sig_child(){
pid_t pid;
int status;
while((pid = waitpid(-1, &status, WNOHANG)) > 0) {}
//Key !!!!!!!! wait or waitpid
return;
}
voidnodefunct_sig(){
signal(SIGCHLD,sig_child);//prevent defunct
int child=0;
pid_t status=0;
int i=0;
while(1){
if(child=fork()==0){
childf();
printf("child(%d):I will be exit...pgid=%d\n",getpid(),getpgid(getpid()));//getpgrp()
abort();
char cmd[1024]="";
sprintf(cmd,"kill -9 %d",getpid());
system(cmd);
exit(5);
}else{
printf("Parent(%d):Main process...\n",getpid());
//kill(child,SIGABRT);
system("ps -A|grep a.out");
sleep(3);
}
printf("Parent: waitting child...pgid=%d\n\n",getpgid(getpid()));
//waitpid(child,&status,
}
}
void main(){
nodefunct_sig();
}
- 避免linux系统调用fork后产生僵死进程
- 调用fork两次以避免僵死进程的产生
- 调用fork两次以避免僵死进程
- 调用fork两次以避免僵死进程
- 调用 fork() 两次以避免僵死进程
- 调用 fork() 两次以避免僵死进程
- 避免产生僵死进程
- linux僵死进程的产生与避免
- linux僵死进程的产生与避免
- apue 8-5调用fork两次以避免僵死进程
- 一个Linux守候进程例子,避免产生僵死进程
- Linux环境下僵死进程的产生及其避免
- UNIX环境高级编程有一个例子说fork两次可以避免产生僵死进程,我不知道,为什么fork两次就能避免僵死进程?
- fork俩次以避免僵死进程
- fork产生僵死子进程的问题
- Unix进程控制之4---避免产生僵死进程
- Linux(Android NDK)如何避免僵死进程
- linux僵死进程以及如何避免
- excel转成csv格式的默认分隔符
- WebView使用总结
- Extjs-实用工具 混合型集合 Ext.util.MixedCollection
- split "|" notes in java
- Extjs-实用工具 获取文本所占的高度和宽度 Ext.util.TextMetrices
- 避免linux系统调用fork后产生僵死进程
- [Linux][2012-08-20] 密码学
- hadoop mapreduce wordcount测试用例
- Extjs-实用工具 处理导航按键 Ext.KeyNev
- 冒泡排序
- 嵌入式软件开发------指针和内存释放的问题分析
- Ubuntu下手机连不到eclipse的解决办法
- IntentService有何优点?
- 性能测试 工具 TProfile 代码简析