2017-03-11 132 views
-1

我必須創建四個流程,每個兒子都必須創建一個兒子並等待它完成。創建N個父母創建一個子女的流程鏈

PROCESS 0 --> PROCESS 1 --> PROCESS 2 --> PROCESS 3 --> PROCESS 4

怎麼辦呢?到目前爲止,我已經試過如下:

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 
#include <string.h> 
#include <sys/types.h> 
#include <sys/wait.h> 
#include <errno.h> 
#include <fcntl.h> 
#define NUM_PROC 5 


int main (void) 
{ 
    int pid; 
    int i; 
    int status; 
    for (i=0; i < NUM_PROC; i++) 
    { 
     if ((pid=fork()) <0) 
     { 
      printf("Error in forking\n"); 
      exit(EXIT_FAILURE); 
     } else if (pid ==0) { 
      printf("Sono: %d, mio padre e: %d\n", getpid(), getppid());  
      pid = fork(); 
     } 
     else { 
      printf("Sono: %d, mio padre e: %d\n", getpid(), getppid()); 
      wait(&status); 
     } 
    } 
    exit(EXIT_SUCCESS); 
} 
+1

所以,你希望別人做你的工作?當執行順序是單個執行時,有多個進程的想法是什麼。只是增加了創建過程的開銷... –

+0

諾諾我不想讓人們做我的工作,我必須做它的鍛鍊,我只是無法找到一個可能的想法,我試着很多,但我無法管理類似的事情 –

+2

你能詳細說明你需要什麼幫助嗎? (你知道如何創建一個過程嗎?你知道如何等待一個過程嗎?你知道如何數到四嗎?你知道如何結合這三個能力嗎?) – ruakh

回答

1

主程序的循環,然後運行同一個環路父和創造更多的子進程創建一個新的子進程。

使用for環和泛化爲N過程:

for (int i=0; i<N; i++) 
{ 
    pid = fork(); 
    if (pid == -1) { // handle error } 
    else if (pid == 0) { 
     // son process (NO FORK INSIDE THIS ELSE IF!) 
    } 
    else { // parent process 
     wait(NULL); 
     exit(0); 
    } 
} 
+0

非常感謝您的幫助。這將是一種在for循環中執行的方式,以便讓某些東西更「便攜」?在每一種情況下都非常感謝 –

+0

@GiovanniMauro編輯。 –