2012-12-03 113 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