좀 더 디버깅 출력을 가지고 코드를 수정하는 것이 실행할 수 있도록. 여기
#include <stdio.h>
#include <stdlib.h>
#include "unistd.h"
int main() {
pid_t x=0;
pid_t y=0;
printf("FORK X \n");
x=fork();
if(y>0) {
printf("FORK 1 \n");
fork();
}
if(x==0) {
printf("FORK 2 \n");
y=fork();
}
printf("FORK 3 \n");
fork();
if(y==0){
printf("FORK 4 \n");
fork();
printf("Some text\n");
}
}
출력, 그리고 모든 이후 포크가 있기 때문에 두 "일부 텍스트"됩니다 "FORK 4"
팬케이크 : tmp를 greedy52 $
FORK X
FORK 3
FORK 4
FORK 2
FORK 4
Some text
Some text
FORK 3
FORK 3
Some text
Some text
FORK 4
Some text
FORK 4
Some text
Some text
Some text
./a.out을
4 "FORK 4"에 의해 도달된다 (각 성공적인 포크()를 호출하는 두 개의 공정 A 및 B 작성)
- @ X = 포크() -> X = 0 @FORK 3 포크! Ax = 0 및 @FORK 3 포크 B
- @ x = fork() -> x = 0 및 @ y = fork() -> y = 0 및 @FORK 3 포크
- @ X = 포크() -> X = 0 @ Y = 포크() -> Y = 0 @FORK 3 포크 B
에서 @ X = 포크() -> x = 0 및 @ y = fork() -> y! = 0 분기는 "일부 텍스트"를 생성하지 않습니다.
FORK X --------> x != 0 -------------------------------> FORK 3 A -----> FORK 4 A (Some text)
| | |--> FORK 4 B (Some text)
| |
| |-----------------------------> FORK 3 B -----> FORK 4 A (Some text)
| |--> FORK 4 B (Some text)
|
|
|----> x == 0 -----> FORK 2 A (y = 0) -----> FORK 3 A -----> FORK 4 A (Some text)
| |--> FORK 4 B (Some text)
| |---> FORK 3 B -----> FORK 4 A (Some text)
| |--> FORK 4 B (Some text)
|
|---> FORK 2 B (y != 0) -----> FORK 3 A -----> XXX bad end
|---> FORK 3 B -----> XXX bad end
두 번만, 그 많은 포크 전화! 제어 흐름을 추적하기 위해'printf'를 추가하려고 했습니까? –
이것은 학교 과제물처럼 보입니다. 이 질문의 목적은 무엇입니까? – manishg
네, 학교 과제입니다. 텍스트가 인쇄 된 횟수를 확인해야합니다. –