一切多进程都从一道有趣的题开始:(fork() && fork()) || ( fork() && fork())
曾经见到这么一道题:
1 int main() { 2 3 if ( (fork() && fork()) || ( fork() && fork()) ) 4 ; 5 cout << getpid() << endl; 6 }
可以分解为以下三个问题:
1. 多进程 fork() 的双重返回值
2. ( 条件a && 条件b ) 的执行问题
3. ( 条件c || 条件d ) 的执行问题
问题一: fork() 返回值是什么
ans : 父进程 return 0
子进程 return pid
问题二: a && b 复合条件如何执行?
ans : 先执行a ,若a 为True 或 !0 则执行b
否则不执行b,直接结束
问题三: c || d 复合条件如何执行?
ans : 先执行c ,若 c 为 False 或 0 则执行d
否则不执行d,直接结束
所以一共7个线程产生
如下图所示:


浙公网安备 33010602011771号