选择题 20.  有如下代码:
    int main()
    {
    fork()||fork();
    }
    以上程序创建的进程个数是______。
【正确答案】 B
【答案解析】 逻辑或运算符||具有短路功能,即如果第一个表达式的值为真,那么运算符||后面的表达式将不再执行,如果第一个表达式的返回值为假,就会继续判断右边的表达式的值是否为真。
   fork()函数的作用是创建一个新的进程,一个现有进程可以调用fork()函数创建一个新进程。由函数fork()创建的新进程被称为子进程(Child Process)。fork()函数被调用一次但会返回两次,两次返回的唯一区别是子进程中返回0而父进程中返回子进程ID。子进程是父进程的副本,它将获得父进程数据空间、堆、栈等资源的副本。注意,子进程持有的是上述存储空间的“副本”,这意味着父子进程间不共享这些存储空间。
   本题中,fork()||fork()语句的执行流程为,在父进程中,左边的fork()函数返回一个非零值(子进程ID),根据逻辑或运算符||的短路原则,前面的表达式为真时,后面的表达式不再执行。
   在子进程中,左边fork()函数的返回值为0,因此会继续执行后面的fork()函数,又创建一个新的进程,因此一共创建了3个进程,分别为main进程->子进程->子进程。
   如图所示,相同形状的为同一进程,共有三种进程。