0

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

#include <stdio.h>
#include <unistd.h>
#include <signal.h>
int count = 0;//global count variable

void catch(int signal){
printf("Ouch! - I got signal %d \n", signal);
printf("count is %d\n", count);
count = 0;
}

int main(){
int pid;
int sec=0;
pid = fork();
int count1 = 0;
(void) signal(SIGALRM, catch);
if(pid==-1){
    printf("error\n");
}
else if(pid==0){//if child
    while(1){//while loop to increment count while parent to sleeping
    count = count + 1;
    }
    //pause();

    }
else{//parent
    sleep(1);//1 second pause
    raise(SIGALRM);//send alarm
    count1 = count1 + 1;
    if(count1>=5){
        return 0;
    }
    exit(0);
}
return 0;

}

4

2 に答える 2

0

raise子ではなく自分自身 (つまり、親) にシグナルを送ります。を使用しkill(child_pid, SIGALRM)ます。

于 2012-04-26T08:14:34.600 に答える
0

fork を使用した後、2 つのプロセスの変数は異なるメモリ位置にあります。したがって、親プロセスでシグナルを発生させると、出力されるのは親プロセスの「カウント」変数です。子プロセスのループ内の「カウント」を出力して、増加することを確認できます

于 2012-04-26T08:15:37.730 に答える