找回密码
 注册
查看: 939|回复: 3

问一个linux下进程调度相关的问题,有一小段代码,谢谢

[复制链接]
发表于 2006-8-12 10:04:31 | 显示全部楼层 |阅读模式
见过这样一段代码,守护进程循环调用一个进程表(单向链表),然后创建子进程去执行进程表中指令,问一下这样不是不停的创建新进程吗?内存应该很快就没了啊,可是实际中该程序运行良好,代码太长,偶把结构大概给出来,麻烦大侠帮忙分析一下机理
守护进程 int main(argc,argv)
{
   ........
   while(1) {
     run();
   }
   return 0;
}
int run()
{
  temp=链表头指针;
  while(temp!=0){
  if ( waitpid( tmp->pid, 0, WNOHANG ) != 0 ) {
  tmp->pid = fork();
  if ( tmp->pid < 0 ) {
     .............
     }
  else if ( tmp->pid == 0 ) {
     execv( tmp->path, tmp->param );
     exit( -1 );
     }
  }  
  temp=下一项;
}
}
进程表中所有指令程序格式大概如下:
int command()
{
  ...........
  while(1) {
    sleep(10);
    do something;
    if(something)
       exit(1);
    sleep(1);
    }
  return 0;
}
整个程序结构基本就这样,比较纳闷,守护进程应该是不停的创建子进程,然后内存不够或进程数到上限,最后挂掉的啊,偏偏程序运行良好,盼望高手能指点迷津,谢谢
 楼主| 发表于 2006-8-12 10:09:24 | 显示全部楼层
补充一下,2.4下
回复

使用道具 举报

发表于 2006-8-12 14:27:03 | 显示全部楼层
(我什么也不懂,我是来踢场子的。:D )
waitpid 函数是干什么用的? 那个链表不是无限长吧?
回复

使用道具 举报

 楼主| 发表于 2006-8-13 03:34:33 | 显示全部楼层
谢谢的说
问题已经解决,就是waitpid搞定的
之前看的中文的函数说明,只说waitpid立刻返回,但是返回值偶以为还是pid的
结果看了英文的....
郁闷
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2025-2-6 20:44 , Processed in 0.022611 second(s), 15 queries .

© 2001-2025 Discuz! Team. Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表