![논리 연산자에서 fork()는 어떻게 수행됩니까? "Hi"는 몇 번 인쇄되나요? 어떻게? [폐쇄]](https://linux55.com/image/67138/%EB%85%BC%EB%A6%AC%20%EC%97%B0%EC%82%B0%EC%9E%90%EC%97%90%EC%84%9C%20fork()%EB%8A%94%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%EC%88%98%ED%96%89%EB%90%A9%EB%8B%88%EA%B9%8C%3F%20%22Hi%22%EB%8A%94%20%EB%AA%87%20%EB%B2%88%20%EC%9D%B8%EC%87%84%EB%90%98%EB%82%98%EC%9A%94%3F%20%EC%96%B4%EB%96%BB%EA%B2%8C%3F%20%5B%ED%8F%90%EC%87%84%5D.png)
#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
호출에는 호출 결과가 서로 다른 두 개의 프로세스 인스턴스가 있습니다. 따라서 일부 하위 프로세스에서는 일부 포크가 호출되지만 다른 프로세스에서는 호출되지 않습니다.
스케치(노란색은 분기된 선이 완료되고 실행이 다음 선으로 진행됨을 의미합니다).