1つの親プロセスに対して「フォーク」を介して複数のプロセスを作成する

TimelordViktorious

stdinからの必要なプロセス数のユーザー入力を受け入れる小さなプログラムを作成したいと思います。その後、私のプログラムは、ユーザーが指定したn個のプロセスをフォークします。後で、子から親にデータをパイプしたいと思います。

ただし、親プロセスは1つだけ必要です。私はこれのためのアルゴリズムを理解しようとしてきました、そして多分私はそれを過度に複雑にしています、しかし私は立ち往生しています。

私はCでフォークとパイプの機能しか使用できないことに注意してください(だから、あまりクレイジーではありません!)

これが私のアルゴリズムです。

親プロセスの場合にのみループし、子プロセスの場合はループしません。

私がループに入る親プロセスである場合は、fork()を呼び出します。それ以外の場合、私は子供であり、子供に関連するいくつかのタスクを実行します(後で親にパイプで戻すことができます)。子プロセスの作成を回避するために、子はループに再び入るべきではありません。

それは意味がありますか?

あなたは私に何をするようにアドバイスしますか?

食物

たとえばn、入力として取得する子の数です。子供ごとに1つのパイプを使用する場合、何ができるか見てみましょう。

親プロセスの場合:

pid_t pid;
int fd[n][2];
for(i = 0; i < n; i++) {
    pipe(fd[i]);
    pid = fork();
    if (pid < 0) {
        perror("whatever");
        exit(1);
    }
    else if (pid == 0) {
        for(j = 0; j < i; j++) {
            if (close(fd[j][0]) < 0) {
                perror("closing fd[0]");
                exit(1);
            }
            if (close(fd[j][1]) < 0) {
                perror("closing fd[1]");
                exit(1);
            }
        }
        func(fd[i]);
    }
}
// other parent stuff next && close file discriptors not needed

そして、あなたfunc()は子供たちがしなければならないことでなければなりません。子のパイプの2つのファイル記述子を引数として取ります。最後にfuncすべきであることに注意してくださいexit()

各子のパイプを作成するソリューションは、それよりも少し優れていますが、少し複雑です(ヒント:fdを引数として渡すこともできますが、すべてのfdを注意して閉じることもできます!)

また、の代わりにをpid定義することで各子を保持し、各pidをとして参照することもできますpid_t pid[n];pidpid[i]

すべての子供が死ぬのを待つことを忘れないでください!

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

1つの親に対してCで複数の子プロセスを作成する

分類Dev

フォークを使用して複数のプロセスを作成する

分類Dev

混乱して作成されたプロセスの数をフォークする

分類Dev

perlを使用して複数のフォークを持つプロセスを強制終了する方法

分類Dev

Pythonで1つのファイルに複数のプロセスを使用してログを記録する

分類Dev

複数の入力文字列に対する単一のmd5sumプロセス(xargsを介して?)

分類Dev

複数の子をフォークして、動的プロセスの複数のタイムステップを同時に計算する方法

分類Dev

複数のプロセスに対してjavaruntime.exec()を実行する

分類Dev

MatLabで1つのハンドルを使用して複数のプロパティにアクセスする

分類Dev

Perlフォークし、親からの複数の子プロセスを停止します

分類Dev

networkx:ループを介して複数のノード属性を持つノードにアクセスする

分類Dev

EXECLを介して1つのプロセスから別のプロセスにデータの連続ストリームを送信する方法

分類Dev

複数のプロセスを並行して異なるターミナルセッションで起動する、またはすべてを1つのフォアグラウンドで起動するBashスクリプト?

分類Dev

両方がパイプを介して親プロセスと通信する場合、1つのサブプロセスが別のサブプロセスをブロックします

分類Dev

複数のファイルをアップロードしてカメラにアクセスする

分類Dev

Googleスプレッドシートの機能を使用して、フォーマットされた順序対を1つのセルに作成する

分類Dev

PowerShellバージョン2でプロセスとプロセスのステータスを確認し、単一のプロセスまたは複数のプロセスに応じて2つの異なる出力を取得しますか?

分類Dev

サブプロセスを介してPythonに複数の引数を送信する方法

分類Dev

さまざまなプロファイルのセットに対して1つのSpringテストクラスをテストする

分類Dev

2つのパイプを使用して親プロセスと子プロセスの間で通信する

分類Dev

Pythonプログラムを介してネットワークフォルダにアクセスする

分類Dev

Azure AppServiceのデプロイタスクを使用してVSTSを介して複数のjarファイルをAzureにアップロードする方法

分類Dev

クラスターgetプロセスIDを持つノードアドオンは、フォークされたすべてのプロセスに対して同じIDを返します

分類Dev

ターミナルを介して複数のプロセスを実行する方法

分類Dev

ターミナルを介して複数のプロセスを実行する方法

分類Dev

複数のcsvファイルに対して同じプロセスを繰り返す

分類Dev

複数のプロセスを使用してファイルを処理するBashスクリプト

分類Dev

親プロセス、2つの子プロセスを作成し、パイプを使用してデータを送信します

分類Dev

ブーストを使用して、非同期で実行される複数の子プロセスを作成する

Related 関連記事

  1. 1

    1つの親に対してCで複数の子プロセスを作成する

  2. 2

    フォークを使用して複数のプロセスを作成する

  3. 3

    混乱して作成されたプロセスの数をフォークする

  4. 4

    perlを使用して複数のフォークを持つプロセスを強制終了する方法

  5. 5

    Pythonで1つのファイルに複数のプロセスを使用してログを記録する

  6. 6

    複数の入力文字列に対する単一のmd5sumプロセス(xargsを介して?)

  7. 7

    複数の子をフォークして、動的プロセスの複数のタイムステップを同時に計算する方法

  8. 8

    複数のプロセスに対してjavaruntime.exec()を実行する

  9. 9

    MatLabで1つのハンドルを使用して複数のプロパティにアクセスする

  10. 10

    Perlフォークし、親からの複数の子プロセスを停止します

  11. 11

    networkx:ループを介して複数のノード属性を持つノードにアクセスする

  12. 12

    EXECLを介して1つのプロセスから別のプロセスにデータの連続ストリームを送信する方法

  13. 13

    複数のプロセスを並行して異なるターミナルセッションで起動する、またはすべてを1つのフォアグラウンドで起動するBashスクリプト?

  14. 14

    両方がパイプを介して親プロセスと通信する場合、1つのサブプロセスが別のサブプロセスをブロックします

  15. 15

    複数のファイルをアップロードしてカメラにアクセスする

  16. 16

    Googleスプレッドシートの機能を使用して、フォーマットされた順序対を1つのセルに作成する

  17. 17

    PowerShellバージョン2でプロセスとプロセスのステータスを確認し、単一のプロセスまたは複数のプロセスに応じて2つの異なる出力を取得しますか?

  18. 18

    サブプロセスを介してPythonに複数の引数を送信する方法

  19. 19

    さまざまなプロファイルのセットに対して1つのSpringテストクラスをテストする

  20. 20

    2つのパイプを使用して親プロセスと子プロセスの間で通信する

  21. 21

    Pythonプログラムを介してネットワークフォルダにアクセスする

  22. 22

    Azure AppServiceのデプロイタスクを使用してVSTSを介して複数のjarファイルをAzureにアップロードする方法

  23. 23

    クラスターgetプロセスIDを持つノードアドオンは、フォークされたすべてのプロセスに対して同じIDを返します

  24. 24

    ターミナルを介して複数のプロセスを実行する方法

  25. 25

    ターミナルを介して複数のプロセスを実行する方法

  26. 26

    複数のcsvファイルに対して同じプロセスを繰り返す

  27. 27

    複数のプロセスを使用してファイルを処理するBashスクリプト

  28. 28

    親プロセス、2つの子プロセスを作成し、パイプを使用してデータを送信します

  29. 29

    ブーストを使用して、非同期で実行される複数の子プロセスを作成する

ホットタグ

アーカイブ