娑婆诃是什么意思:僵尸进程及其避免方法 - sunchao151的专栏 - CSDN博客
来源:百度文库 编辑:中财网 时间:2024/05/08 13:06:35
1、何谓僵尸进程?
在linux系统中,一个已经终止但父进程尚未对其进行善后处理(释放子进程相关信息占用的资源)的子进程叫做僵尸进程。子进程结束时,父进程调用pid_t wait(int *statloc)或者pid_t waitpid(pid_t pid,int *statloc,int options)获取内核中为子进程保存的信息(进程id,终止状态)。2、僵尸进程避免分析
创建进程时,子进程的终止状态要返回给父进程,但调用fork函数时候,若父进程比子进程提前结束,则由init进程领养:在一个进程终止时候,内核逐个检查所有活动进程,判断它是否是被终止进程的子进程,如果是,则将该进程父进程的ID更改为1,这样,每个进程都有父进程,init 进程只要检测有子进程终止就会调用wait或waitpid释放资源,防止僵尸进程。3、解决办法:调用两次fork避免僵尸进程#include "apue.h"
#include
int main(void)
{
pid_t pid;
if ((pid = fork()) < 0) {
err_sys("fork error");
} else if (pid == 0) { // 第一个子进程
if ((pid = fork()) < 0)
err_sys("fork error");
else if (pid > 0)
exit(0); //第二个子进程的父进程终止(第一个子进程)
/*
* 这里是第二个子进程(孤儿进程),其父进程已经变成了init进程,当亲生父进程在上面调用exit()终止后,在此处继续执 *行,当第二个子进程终止的时候,父进程init会获取其状态,从而避免僵尸进程嗯。
*/
sleep(2); //保证父进程优先运行(第一个子进程)
printf("second child, parent pid = %d\n", getppid()); //获取父进程ID(即init ID,为1)
exit(0); //第二个子进程终止
} if (waitpid(pid, NULL, 0) != pid) //等待第一个子进程
err_sys("waitpid error"); printf("i am the parents of your parents\n");
/*
* 这里是继续执行原始父进程(第一个父进程),且知道不是第二个子进程的父进程
*/
exit(0); //第一个父进程终止
} 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/sunchao151/archive/2009/01/01/3664552.aspx
在linux系统中,一个已经终止但父进程尚未对其进行善后处理(释放子进程相关信息占用的资源)的子进程叫做僵尸进程。子进程结束时,父进程调用pid_t wait(int *statloc)或者pid_t waitpid(pid_t pid,int *statloc,int options)获取内核中为子进程保存的信息(进程id,终止状态)。2、僵尸进程避免分析
创建进程时,子进程的终止状态要返回给父进程,但调用fork函数时候,若父进程比子进程提前结束,则由init进程领养:在一个进程终止时候,内核逐个检查所有活动进程,判断它是否是被终止进程的子进程,如果是,则将该进程父进程的ID更改为1,这样,每个进程都有父进程,init 进程只要检测有子进程终止就会调用wait或waitpid释放资源,防止僵尸进程。3、解决办法:调用两次fork避免僵尸进程#include "apue.h"
#include
int main(void)
{
pid_t pid;
if ((pid = fork()) < 0) {
err_sys("fork error");
} else if (pid == 0) { // 第一个子进程
if ((pid = fork()) < 0)
err_sys("fork error");
else if (pid > 0)
exit(0); //第二个子进程的父进程终止(第一个子进程)
/*
* 这里是第二个子进程(孤儿进程),其父进程已经变成了init进程,当亲生父进程在上面调用exit()终止后,在此处继续执 *行,当第二个子进程终止的时候,父进程init会获取其状态,从而避免僵尸进程嗯。
*/
sleep(2); //保证父进程优先运行(第一个子进程)
printf("second child, parent pid = %d\n", getppid()); //获取父进程ID(即init ID,为1)
exit(0); //第二个子进程终止
} if (waitpid(pid, NULL, 0) != pid) //等待第一个子进程
err_sys("waitpid error"); printf("i am the parents of your parents\n");
/*
* 这里是继续执行原始父进程(第一个父进程),且知道不是第二个子进程的父进程
*/
exit(0); //第一个父进程终止
} 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/sunchao151/archive/2009/01/01/3664552.aspx
中国社会主义进程及其规律
处理僵尸进程出现内存错误
修辞方法及其作用
描写方法及其作用
论证方法及其作用
如何避免qqfacerclient进程自动开启
晕车,有啥好方法可以避免
如何避免这种骗钱方法?
哪些方法可以避免坏账?
避免强行关机的方法
避免晕车的好方法
什么是最小二乘法及其应用方法
怎么组织阅读教学,及其方法?
灭火的方法及其原理
生物制药的方法及其过程
狗常见疾病及其治疗方法
僵尸!!
避免晕机的最好方法是什么?
实验过程中避免静电的方法?
衣服退色,有什么方法可以避免?
求避免添加重复曲目的方法?
考美术专业有什么方法,避免走弯路
求避免增值税发票过期的好方法!
求避免增值税发票过期的好方法!