###########大家来讨论一下僵死进程的问题###########

liyifang 2003-06-03 03:47:08
最近在一本书上看到一个通过2次fork来避免僵死进程的例子:
#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>

main()
{
pid_t pid;

pid=fork();

if(pid<0)
printf("fork error\n");
else if(pid==0){
pid=fork();
if(pid<0){
printf("fork error\n");
}
else if(pid>0){
printf("first child\n");
exit(0);
}
sleep(2);
printf("second child,parent id is %d\n",getppid());
exit(0);
}

if(waitpid(pid,NULL,0)!=pid)
printf("waitpid error\n");

printf("parent\n");
exit(0);
}

看后有如下疑问:只调用一次fork,且父进程不调用waitpid,在父进程退出后子进程的父进程变为init进程,子进程也不会成为僵死进程,为什么要调用2次?另外在子进程中直接调用setpgrp()函数也可以使其父进程变为init进程,为何一定要2次fork?还有那为兄弟对进程组比较情况,能否介绍一下?


...全文
76 2 打赏 收藏 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
liyifang 2003-06-04
  • 打赏
  • 举报
回复
谢谢,已经明白为什么要fork2次了。我看的那本书是翻译过来的,翻译的不是很好,英文的更好理解些:)
cao_elsie 2003-06-03
  • 打赏
  • 举报
回复
你可能没有理解僵死进程的意思,如果父进程没有调用waitpid而子进程又先于父进程退出的情况下,因为子进程不会被init进程接管,会出现僵死进程,因此如果你在程序中不希望父进程调用waitpid同时又不希望出现僵死进程的情况下要fork两次,这样第一个子进程通过父进程调用waitpid回收资源,而第二个子进程就由init进程接管。书中的原文说的就是If we want to write a process so that it forks a child but we don't want to wait for the child to complete and we don't want the child to become a zombie until we terminate, the trick is to call fork twice.
内容概要:本文研究了计及需求侧响应的日前、日内两阶段鲁棒备用优化方法,旨在应对高比例可再生能源接入背景下电力系统中存在的不确定性问题。通过构建两阶段鲁棒优化模型,将日前调度作为第一阶段决策,日内调整作为第二阶段修正,充分考虑风电、光伏等出力波动以及负荷变化带来的影响。模型引入需求侧响应机制,利用可调节负荷参与系统备用,提升系统的灵活性与鲁棒性。采用列与约束生成(C&CG)算法对两阶段鲁棒优化问题进行求解,并通过Matlab编程实现,结合标准测试系统进行仿真分析,验证了所提方法在降低运行成本、提高可再生能源消纳能力和增强系统可靠性方面的有效性。; 适合人群:具备电力系统优化、运筹学及Matlab编程基础的研究生、科研人员及从事能源系统规划与运行的专业技术人员。; 使用场景及目标:①应用于含高比例可再生能源的电力系统调度决策,提升调度方案的鲁棒性;②为需求侧资源参与电力系统备用提供建模与求解工具;③支撑科研教学中关于两阶段鲁棒优化、C&CG算法实现的学习与实践。; 阅读建议:建议读者结合Matlab代码深入理解模型构建与求解流程,重点关注不确定性集合的刻画方式、需求侧响应的建模方法以及C&CG算法的迭代逻辑,宜配合相关优化理论资料进行系统学习。

23,224

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧