2017-02-17 4 views
0

nを入力とするn個のプロセスのチェーンを作成し、プロセスの出力は、再帰関数imableを使用して、parent1-> child1(parent2) - > child2(parent3)出力を生成するが、ループを終了することができない場合、ループの中断するnの入力を送信する際にも助けが必要です。n個のサブプロセスのチェーンを作成する

は、以下の私のコードです:

第一:あなたは私はあなたが以下の問題を抱えている理解して言っていることから、

#include <sys/types.h> 
#include <unistd.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <sys/wait.h> 

int foo(const char *whoami) { 
    printf("I am a %s. My pid is:%d my ppid is %d\n", whoami, getpid(), getppid()); 
    return 1; 
} 

int func() { 
    pid_t pid=fork(); 
    if (pid==0) { /* only execute this if child */ 
     foo("child"); 
     pid_t pid=fork(); 
     if (pid==0) { /* only execute this if child */ 
      foo("child"); 
      func(); 
      exit(0); 
     } 
     } 
     exit(0); 
    } 
    wait(0); /* only the parent waits */ 
    return 0;  
} 

int main(void){ 
    foo("parent"); 
    func(); 
    return 0; 
} 
+0

また、CまたはC++のいずれかのタグを選択し、その後、Javaのタグを削除してください。 – stijn

答えて

1

単純な理由でループを終了することはできません。つまり、あなたはスポーンします子プロセスは無限に終了します。fork()新しいプロセスが開始されると、それは再びフォークします。

gcc -std=c99 prog.c -o prog

./prog

OUTPUT:

I am a child. My pid is: 1159 my ppid is 1158 
I am a child. My pid is: 1160 my ppid is 1159 
I am a child. My pid is: 1161 my ppid is 1160 
I am a child. My pid is: 1162 my ppid is 1161 
I am a child. My pid is: 1163 my ppid is 1162 
+0

それは私が感謝することを期待していたものです! – Raj

0

。あるプロセスから別のプロセスに 'データ'を送信しようとしています

第2位です。プログラムの実行を停止する方法を見つけようとしています。

今すぐです。あなたがそれをしたいと私はそれを正しく理解し、それを達成するための2つの方法があります。 1つは共有メモリの使用で、もう1つはパイプラインの使用です。共用メモリは、何をしているのかがはっきりしています。パイプはプロセスのstdoutを受け取り、次のプロセスでstdinとしてリダイレクトします。

あなたのプログラムにはクロージャが必要です。子プロセスは、コマンド(exec)を実行したとき、または(IF文などを使用して)返されたときに実行されます。あなたの好みのステートメントを作成することができます。子プロセスが要件を満たしている場合は、それを死に至らせることができます。kill(pid, SIGKILL);コマンドを使用して子プロセスから親プロセスを強制終了する方法もあります。

私は、 私の前提があなたに何かを導いてくれることを願っています!

+0

あなたの説明は、私がプロセスに感謝していたことの疑いを明確にするのに役立ちました。 – Raj

関連する問題