그래서 이것은 우리가 우리의 학습 가이드에있어 질문 :컴퓨터 시스템에 문제가 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. 그래서 내 질문에 내가 보이지 않아요 뭔가가 또는이 오타 추측했다 준 ? 몇 시간 전에 내 교수에게 전자 메일을 보냈 는데도 아직 아무 것도 듣지 못했습니다.