2012-12-03 114 views
0

之间的资源争夺以下​​是我的测试代码:如何看父进程和子进程

#include <unistd.h> 
    #include <stdio.h> 
    #include <stdlib.h> 
    #include <string.h> 

    int main() 
    { 
pid_t pid; 

/* create first child process */ 
pid = fork(); 
if (pid < 0) { 
    perror("fork error"); 
    exit(1); 
} 

if (pid > 0) {   // parent process 
    pid = fork(); 
    if (pid < 0) { 
     perror("fork error"); 
     exit(1); 
    } 

    if (pid > 0) {  // parent process 
     for (int i = 0; i < 100; i++) { 
      printf("aaaaaaaaaaa\n"); 
     } 
    } else {    // second child process 
     for (int i = 0; i < 100; i++) { 
      printf("cccccccccc\n"); 
     } 
    } 
} else {     // first child process 
    for (int i = 0; i < 100; i++) { 
     printf("bbbbbbbbbb\n"); 
    } 
} 

exit(0); 

}

三个过程将内容传递给printf到标准输出,但我每次运行的时间代码,事实证明,三个进程一个一个地运行,我看不到我期望的输出。我知道这是因为CPU速度太快,几乎不可能看到我期望的输出。所以我写了另一个程序这是一个死循环,就像这样: while(1){ i ++; } 使CPU使用率高,但我仍然看不到我期望的输出。 我能做什么?

+0

你可以发布输出..? – akp

+0

@akp,输出如下:100行aaaaaaaaaa \ n,然后遵循100 bbbbbbbbbb \ n,然后遵循100 cccccccccc \ n。我期望的输出是三个部分相互混合。可能是这样的: 60行aaaaaaaaaa \ n,100行bbbbbbbbbb \ n,50行cccccccccc \ n,40行aaaaaaaaaa \ n,50行cccccccccc \ n。但CPU看起来太快了,我看不到这样的输出 – haipeng31

+0

ur代码工作正常,它在我的系统上产生随机输出...我认为这只是由于fst CPU ... – akp

回答

0

这完全取决于操作系统调度多少时间它给一个特定的过程。

所以如果u叉很多进程然后给一个进程的时间将小于u能得到所需的结果 ....

但作为低负载CPU的情况下,给定的时间到一个过程变得更有可能有足够的时间来打印数千个输出在它的时间量分配给给定的过程,这就是为什么你得到指定的(由u)结果 ...

+0

也许我应该尝试了解linux中的详细预定过程.Linux内核是如此困难 – haipeng31

+0

是的,你必须得到关于内核调度程序的一些细节,因为它是如何工作的... – akp