2012-04-26 6 views
0

ねえ、私は失われているようです。私は、無限ループ内の子供のカウントをインクリメントし、親がシグナルを送信するたびにカウントを出力するようになっています。これは1秒ごとに行う必要があります。私は自分のコードを書いたが、フォークを使用した後、子プロセスと親プロセスが同時に実行されると考えたが、そうではないので、この問題に対処する方法がわからない。すべてのヘルプはスリープ機能を使用している間、どのようにカウントを増やしますか? (C言語で)

#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; 

}

+0

http://stackoverflow.com/questions/10328956/how-do-you-increment-a-count-while-using-the-睡眠機能 – cnicutar

+0

編集ボタンを使って質問を変更し、基本的に同じ質問をもう一度尋ねないでください –

答えて

0

raise素晴らしいことだ(つまり、親)は子供に自分自身に信号を送ります。 kill(child_pid, SIGALRM)を使用してください。

0

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

関連する問題