1

親から子に信号を送信している次のソースコードがあります。

sigset_t sig_m1, sig_m2, sig_null;
int signal_flag=0;

void start_signalset();

void sig_func(int signr) {
  printf("%d\n", signr, n);

  start_signalset();
}

void start_signalset() {
  if(signal(SIGUSR2, sig_func) == SIG_ERR) {
    exit(0);
  }

 if(signal(SIGUSR1, sig_func) == SIG_ERR) {
    exit(0);
  }
}

void wait_for_parents() {
    while(signal_flag == 0) {
        sigsuspend(&sig_null);
    }
}


int main(){
    int result,pt_pid;
    start_signalset();
    pt_pid=getpid(); 

    result = fork();
    if(result==-1){ 

        printf("Can't fork child\n");
        exit(-1);
    } else if (result == 0) {

            wait_for_parents();

    } else {
       kill(result,SIGUSR2);
       kill(result,SIGUSR2);
       kill(result,SIGUSR1);
       kill(result,SIGUSR2);

        signal_flag = 1;
    }    
    return 0; 
}

31, 31, 31, 30 と表示されますが、31, 31, 30, 31 と表示されることを期待していました。同期に問題があると思います。ただし、修正方法がわかりません。また、問題が存在するかどうかもわかりません。

よろしく、デニス。

4

1 に答える 1