2012-10-16 1 views
2

그래서 이것은 우리가 우리의 학습 가이드에있어 질문 :컴퓨터 시스템에 문제가 2 중간 고사 학습 가이드는

친구는 부모가 이벤트를 카운트 할 수있는 부모와 자식 프로세스로 프로그램을 작성하고자하는

어린이. 아이디어는 각 이벤트에서 부모에게 신호 (SIGUSR2)를 보냅니다. 부모 프로세스는 SIGUSR2에 대한 신호 처리기를 가지고있어 처리기가 실행될 때마다 카운터를 증가시킵니다. 그런 다음 부모는 자식이 종료 된 후에 카운트를 인쇄 할 수 있습니다.

친구가 아래 프로토 타입을 작성하려고했습니다. 자식은 부모에게 5 개의 신호를 보냅니다. 친구는 부모님의 작업을 시뮬레이션하고 자녀가 일하기 위해 6 번과 20 번 줄에서 잠을 청합니다. 그는 카운터 값이 아래와 같이 수면 시간으로, 그러나 5

로 라인 (27)에 인쇄 예상 그는 일관 값 (1) 그는 그가 일을 가지고 왜 당신을 요구하지 5.

를 인쇄하지 얻었다 5. 당신의 설명은 무엇입니까?

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


1 int counter = 0; 
2 
3 void handler(int sig) 
4 { 
5  counter++; 
6  sleep(1); /* Parent does some work in the handler */ 
7  return; 
8 } 
9 
10 int main() 
11 { 
12  int i; 
13 
14  signal(SIGUSR2, handler); 
15 
16  if (fork() == 0) { /* Child */ 
17  for (i = 0; i < 5; i++) { 
18   kill(getppid(), SIGUSR2); 
19   printf("sent SIGUSR2 to parent\n"); 
20   sleep(1); /* Child does some work */ 
21  
22  } 
23  exit(0); 
24  } 
25 
26  waitpid(-1, NULL, 0); 
27  printf("counter=%d\n", counter); 
28  exit(0); 
29 } 

그것은 나에게 정확한보고, 나는 코드를 가져다가 그것을 실행했을 때, 출력은 나를 5. 그래서 내 질문에 내가 보이지 않아요 뭔가가 또는이 오타 추측했다 준 ? 몇 시간 전에 내 교수에게 전자 메일을 보냈 는데도 아직 아무 것도 듣지 못했습니다.

답변

0

어떤 프로세스에서 잠자기 시간이 있었는지는 분명하지 않지만 부모의 시간이 자녀의 시간보다 길면 자녀가 전에 종료 될 수 있습니다. 부모는 모든 신호를 처리 할 수있는 기회를 가졌습니다. 처음 신호가 잡히면 부모가 깨어나 기 전에 부모가 잠자기에 들어가는 극단적 인 경우를 생각해보십시오. 첫 번째 신호 이후에는 아무 신호도 볼 수 없습니다.

관련 문제