免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1355 | 回复: 7
打印 上一主题 下一主题

关于进程组的问题,帮我看看阿谢谢先(有代码) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-09-26 13:32 |只看该作者 |倒序浏览
我创建了几个子进程,然后让他们创建加入到一个新的进程组中去。源代码如下
  main()
{  int  shmid;
    int  pid;
    int   *t;
    int   d;
    printf("the  father pid  is %d,my  father is %d,my term is %d\n",
     getpid(),getppid(),getpgrp());
   shmid=shmget(100,10,IPC_CREAT|0666);
   t=shmat(shmid,NULL,0);
   *t=0;
    for(d=1;d<6;d++)
   { if((pid=fork())<0)
    /*sleep(10);*/
shmid=shmget(100,10,IPC_CREAT|0666);
     t=shmat(shmid,NULL,0);
     printf("t=%d\n",*t);
    printf("i am %d,my  father is %d,my term is %d\n",getpid (),getppid(),getpgrp());
    if(*t==0)
    {
      setpgid(getpid(),getpid());
      *t=getpid();
      printf("i am %d,my  father is %d,my term is %d\n",getpid(),getppid(),getpgrp());
    }
  else
   {   
    setpgid(getpid(),*t);
    printf("i am  %d,my father is %d, my term is %d\n",getpid(),getppid(),getpgrp());}
    exit(0);
       }
       }
exit(0);
       }
  我创建了五个子进程,然后以第一个子进程为新的进程组的队长 ,其他子进程顺利加入。
  但是如果我加入sleep(10)语句 让父进程先结束,让init 接管五个子进程,能够顺利接管,但是第一个子进程顺利创建新的进程组后,其他四个子进程却没有顺利加入。
其他四个子进程的进程组号还是以前父进程的组号,不知道为什么??我估计是
setpgid(getpid(),*t);这条语句没有运行,但为什么了?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2003-09-26 16:22 |只看该作者

关于进程组的问题,帮我看看阿谢谢先(有代码)

几个问题

  1. if((pid=fork())<0)
复制代码


后面是什么?
子进程怎么退出for循环的?没看到

多个进程的共享内存的操作,最好用锁机制互斥访问,否则可能导致未知的后果。

论坛徽章:
0
3 [报告]
发表于 2003-09-26 16:30 |只看该作者

关于进程组的问题,帮我看看阿谢谢先(有代码)

对不起  有个笔误
if((pid=fork())<0)

shmid=shmget(100,10,IPC_CREAT|0666);
对不起 是笔误  应该是if((pid=fork())==0)

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
4 [报告]
发表于 2003-09-26 16:43 |只看该作者

关于进程组的问题,帮我看看阿谢谢先(有代码)

哦,同步的问题也要解决。

很简单,子进程都是并发进行的,完全有可能都读到0,然后各自setpgrp为自己

论坛徽章:
0
5 [报告]
发表于 2003-09-26 16:50 |只看该作者

关于进程组的问题,帮我看看阿谢谢先(有代码)

可是我删除sleep(10)这个语句,就没有问题啊。这个语句应该不会影响子进程的并发关系阿。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
6 [报告]
发表于 2003-09-26 17:17 |只看该作者

关于进程组的问题,帮我看看阿谢谢先(有代码)

那是呀,因为sleep后,不会有互斥的问题。肯定是第一个先读写。10秒钟后才生出另外一个。

论坛徽章:
0
7 [报告]
发表于 2003-09-26 17:25 |只看该作者

关于进程组的问题,帮我看看阿谢谢先(有代码)

晕  可问题是删除了sleep程序反而正常阿
,而且为什么10秒后才生成第二个,我的父进程又不sleep阿
,sleep是我的子进程阿

论坛徽章:
0
8 [报告]
发表于 2006-03-19 20:05 |只看该作者
第一个子进程怎么没有exit?那岂不是循环回去了又创建N个多余的子进程?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP