2

皆さん、私は道に迷ったようです。無限ループ内の子でカウントをインクリメントできるはずであり、親がシグナルを送信するたびにカウントを出力する必要があります。これは1秒ごとにする必要があります。コードを書きましたが、フォークを使用した後、子プロセスと親プロセスが同時に実行されると思いましたが、そうではないため、この問題に取り組む方法がわかりません。どんな助けでも素晴らしいでしょう

4

2 に答える 2

1

あなたが説明していることは、理論的にはうまくいくはずです。

fork()プロセスに慣れていない場合、特に を使用して、並列コードを記述するのは難しい場合があります。

これが私の提案です。たとえば、コード全体に一連のデバッグ出力を追加します。

int pid = fork();
if(pid == -1) {
    printf("Fork failed!\n");
} else if (pid) {
    printf("I'm the parent!\n");
    // Do stuff
    printf("Parent exiting\n");
    exit(0);
} else {
    printf("I'm the child!\n");
    // Do stuff
    printf("Child exiting\n");
    exit(0);
}

次に、プログラムが本来の動作をしているかどうかを確認できます。

また、シグナル ハンドラーにステートメントを追加して、printf()それが呼び出されていることを確認できるようにします。

于 2012-04-26T07:44:05.913 に答える
1

子プロセスは を実行するだけでsleep()よく、親に送信SIGALRMして起動させる必要があります。おそらく、子プロセスをビジー ループに陥らせ、大量の CPU を消費したため、親プロセスが予測どおりに実行されなかった可能性があります。

もちろん、このような質問への回答は、コードを示した方がはるかに優れています。

于 2012-04-26T07:36:28.963 に答える