免费注册 查看新帖 |

Chinaunix

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

关于一个父进程的多个子进程问题(fork问题) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-10-05 16:52 |只看该作者 |倒序浏览
虽然我刚接触linux,但是我发现它让人不得不着迷,问一个粗浅的问题,请大家帮忙!
下面是我自己试验的一个小程序段:
main()
{
   int pid, child_id, child_id_two;
   pid = getpid();
   printf("process ID = %d\n", pid);

   if((child_id=fork()) != 0) { /* 建立第一个子进程 */
   pid = getpid();
   printf("process ID (parent) = %d\n", pid);
   printf("parent process complete.\n";
   }
   else if ((child_id_two=fork()) == 0) { /* 建立第二个子进程 */
   /* 第一个子进程的输出*/
   pid = getpid();
   printf("process ID (child 2) = %d\n", pid);
   printf("child2 process complete.\n";
   printf("child id 2 = %d\n", child_id_two);
   } else {
   /* 第一个子进程的输出*/
   pid=getpid();
   printf("process ID (child) = %d\n", pid);
   printf("child process complete.\n";
   printf("child id 1 = %d\n", child_id);
   }
}

程序的执行结果是:

process ID = 29643
process ID (child 2) = 29645
child2 process complete.
child id 2 = 0
process ID (child) = 29644
child process complete.
child id 1 = 0
process ID (parent) = 29643
parent process complete.

我有两点不太清楚:
1、我建立的这两个子进程都是同一个父进程的子进程么?
还是,第二个子进程是第一个子进程的子进程?

2、如果这两个子进程都是同一个父进程的子进程,那么它们的id号应该是不同
的呀,可是这里child id 2 和child id 1都是零,那么这两个子进程之间如何
相互区分呢? 这是为什么呢?

再一次感谢大家。

论坛徽章:
0
2 [报告]
发表于 2004-10-05 20:03 |只看该作者

关于一个父进程的多个子进程问题(fork问题)

main()
{
   int pid, child_id, child_id_two;
   pid = getpid();
   printf("process ID = %d\n", pid);  

   if((child_id=fork())== 0) /* 建立第一个子进程 */
   {  
          if ((child_id_two=fork()) == 0) /*子进程中建立子进程 */
          {  
                       pid = getpid();
                       printf("process ID (child 2) = %d\n", pid);
                       printf("child2 process complete.\n";
                       printf("child id 2 = %d\n", child_id_two);
          }
                   else/*第一个子进程*/
          {
                     /* 第一个子进程的输出*/
                     pid=getpid();
                     printf("process ID (child) = %d\n", pid);
                     printf("child process complete.\n";
                     printf("child id 1 = %d\n", child_id);
          }

   } /*end 第一个子进程*/

   else/*主进程*/
   {
      pid = getpid();
      printf("process ID (parent) = %d\n", pid);
      printf("parent process complete.\n";
    }
}

老兄,还要好好练!你的程序太混乱,要养成好的书写习惯
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP