QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1143|回复: 8

有关进程控制的问题

[复制链接]
发表于 2004-12-15 00:01:43 | 显示全部楼层 |阅读模式
代码如下:
   
#include<stdio.h>
   main()
   {
      int i;
      while ((i=fork())==-1);  
      printf("i=%d\n",i);   
      if (i)
         printf("It is a parent process!");  /
      else
         printf("It is a child process!");   
   }
编译执行输出如下:

i=0                     
It is a child process!  
i=6980                  
It is a parent process!

请问:

1。是否子进程先于父进程执行,或者是两者同时执行?
2。为什么输出的两个 i 值不同?

先行谢过!
发表于 2004-12-15 00:05:15 | 显示全部楼层
这个这个...我想大哥您不应该把这个主题放在shell栏吧   
回复

使用道具 举报

 楼主| 发表于 2004-12-15 00:11:11 | 显示全部楼层
哦……哦!
抱歉!
这里近些,就发这里了。还请指点!
回复

使用道具 举报

发表于 2004-12-15 00:12:30 | 显示全部楼层
对c不太了解,俺先看看...
有结果了就贴上来...

弱弱的问一句:为什么while子句后边有个分号?
回复

使用道具 举报

发表于 2004-12-15 11:26:46 | 显示全部楼层
1.子进程和父进程的执行顺序是不确定的,我做过实验,一般是子进程先执行,但偶尔也会父进程先执行。
2.两个I值不同?当然不同了,fork对于子进程返回的是0,对父进程返回的是子进程ID号,所以两个i一个表示是子进程(有0为证),一个表示是父进程(有进程号6980)为证。
回复

使用道具 举报

 楼主| 发表于 2004-12-15 18:20:26 | 显示全部楼层
while子句创建子进程,如果创建失败则反复创建
回复

使用道具 举报

 楼主| 发表于 2004-12-15 18:43:15 | 显示全部楼层
我又修改了一下代码:
#include<stdio.h>                        
main()                                   
{                                       
  int i;                                 
  while ((i=fork())==-1);               
  printf("i=%d\n",i);                    
  if(i)                                 
  {                                      
    int j;                              
    while ((j=fork())==-1);              
    printf("j=%d\n",j);                  
    if(j)                                
      printf(" a in the parent process\n"
    else                                 
      printf(" b in another child process
  }                                      
  else                                   
    printf(" c in a child process\n");   
}                                       
输出结果如下:   
i=0                        
c in a child process      
i=18734                     
j=0                        
b in another child process
j=18735                     
a in the parent process   

这里i=18734和j=18735应该都是属于父进程的,对吗?

i=0表示第一个子进程创建成功
j=0表示第二个子进程创建成功
i=18734和j=18735分别表示两个子进程的ID号

对否?
回复

使用道具 举报

发表于 2004-12-15 22:27:32 | 显示全部楼层
this is some basic knowledge of unix/linux system call, the answer is already in the reference book.

btw, the linux system call is a bit diff from traditional unix, there is some variance in the posix standard that linux implemented.
回复

使用道具 举报

 楼主| 发表于 2004-12-15 22:45:42 | 显示全部楼层
呵呵,小弟初学乍练,很多虽然很基本的东西但还是不太明白。还请诸位高手多多指点。
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-5 16:41 , Processed in 0.048564 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

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