1

[Mat][1] が示唆するように、IPC を使用して解決していますが、それでもできません
。ちなみに、宿題ではなくサンプル演習です。しかし、私は試験が来るので、
ここで私を助けてください
.

ありがとう。

#include<stdio.h>  
#include<sys/wait.h>  
#include<wait.h>  
#include<signal.h>  

void my_handler_for_kid2(int sig_num){  
  printf("KID2:Recieved SIGUSR1 from KID1\n");  
}  
void my_handler_for_parent(int sig_num){  
  printf("PARENT:Recieved SIGUSR2 from KID2\n");  
}  

int main(){  
  int status;  
 pid_t kid1,kid2;  

  void my_handler_for_kid2(int sig_num);  
  void my_handler_for_parent(int sig_num);  
  signal(SIGUSR1,my_handler_for_kid2);
  signal(SIGUSR2,my_handler_for_parent);
  kid1=fork();  
  if(kid1 < 0){  
    printf("Fork not successfull\n");  
  }  
  else if(kid1 == 0){  
    printf("I am KID1[%ld] and I am going to sleep\n",(long) getpid());  
    sleep(5);  
    printf("Just woke up!\n");  
    kill(kid2,SIGUSR1);  
      }  
  else{  
    kid2=fork();  
    if(kid2 < 0){ 
      printf("Fork not successfull\n");  
    }  
    else if(kid2 == 0){  
      printf("I am KID2[%ld] and I am going to wait for KID1 to wakeup\n",(long)       getpid());  
      pause(); 
      //signal(SIGUSR1,my_handler_for_kid2);  
      kill(getppid(),SIGUSR2);  
    }  
    else{  
      printf("Father[%ld] here and going to wait for both kids to respond to me\n",    (long) getpid());  
      pause();
      //signal(SIGUSR2,my_handler_for_parent);  
      waitpid(kid1,&status,NULL);  
      waitpid(kid2,&status,NULL);  
    }  
 }  
} 

rizwan@riz-pc:~/Documents$ ./a.out
I am KID1[2278] and I am going to sleep
 Father[2277] here and going to wait for both kids to respond to me
 I am KID2[2279] and I am going to wait for KID1 to wakeup
 Just woke up!
KID2:Recieved SIGUSR1 from KID1
^C
rizwan@riz-pc:~/Documents$ 








  [1]: http://stackoverflow.com/users/635608/mat  
4

3 に答える 3

6

POSIXから:

wait() および waitpid() 関数は、呼び出し元の子プロセスの 1 つに関するステータス情報を取得します。

これらの関数を使用して兄弟間で同期することはできません。子を待機している 1 つの親からのみです。
目的を達成するには、「実際の」同期プリミティブを使用する必要があります (セマフォ、または他の形式のIPC )。

于 2012-06-30T06:33:27.753 に答える
1

Mutex 同期が機能する可能性があります。

于 2012-06-30T08:37:44.527 に答える
0

このためには、条件変数を使用する必要があります。ネットから任意のチュートリアルを取得します。

于 2012-07-04T09:35:40.333 に答える