#include <stdio.h>
#include <unistd.h>
int main()
{
(fork() && fork()) || (fork() && fork());
printf("Hi...\n");
return 0;
}
答え1
子はfork
値を返し0
、親はゼロ以外の値を返すことを知っています。かなり複雑になりますが、プロセスがどのように分岐するかについてツリーをスケッチできます。
or
最初の引数がある場合、結果はtrue
すでに知られているため、2番目の引数の計算はスキップされますtrue
。and
最初の引数がある場合は、2番目の引数をスキップします。false
この場合、結果はすでに知られているからですfalse
。各fork
呼び出しには、呼び出しの結果が異なる2つのプロセスインスタンスがあります。したがって、一部の子プロセスでは一部のフォークが呼び出されますが、他のプロセスでは呼び出されません。
スケッチ(黄色は、分岐した線が完了し、実行が次の行に進むことを意味します)。