논리 연산자에서 fork()는 어떻게 수행됩니까? "Hi"는 몇 번 인쇄되나요? 어떻게? [폐쇄]

논리 연산자에서 fork()는 어떻게 수행됩니까? "Hi"는 몇 번 인쇄되나요? 어떻게? [폐쇄]
#include <stdio.h>
#include <unistd.h>

int main()
{
(fork() && fork()) || (fork() && fork());
printf("Hi...\n");
return 0;
}

답변1

자식은 fork값을 반환 0하고 부모는 0이 아닌 값을 반환한다는 것을 알고 있습니다. 꽤 복잡해지지만 프로세스가 어떻게 분기되는지에 대한 트리를 스케치할 수 있습니다.

or첫 번째 인수가 true이면 결과가 이미 로 알려져 있으므로 두 번째 인수의 계산을 건너뜁니다 true. and첫 번째 인수가 이면 두 번째 인수를 건너뜁니다. false이 경우 결과는 이미 로 알려져 있기 때문입니다 false. 각 fork호출에는 호출 결과가 서로 다른 두 개의 프로세스 인스턴스가 있습니다. 따라서 일부 하위 프로세스에서는 일부 포크가 호출되지만 다른 프로세스에서는 호출되지 않습니다.

스케치(노란색은 분기된 선이 완료되고 실행이 다음 선으로 진행됨을 의미합니다). 여기에 이미지 설명을 입력하세요.

관련 정보