📜  Fork()–练习题

📅  最后修改于: 2021-05-26 00:18:29             🧑  作者: Mango

先决条件:fork,fork和二叉树的基础知识,

范例1:
以下代码的输出是什么?

#include 
#include 
int main()
{
    if (fork() || fork())
        fork();
    printf("1 ");
    return 0;
}

输出:

1 1 1 1 1 

叉1

解释:
1.将创建两个进程,一个父P(具有子进程的进程ID),另一个是子C1(进程ID = 0)。
2.在if语句中,我们使用OR运算符(||),在这种情况下,当第一个条件为false时将评估第二个条件。
3.父进程P将返回正整数,因此它将直接执行语句并创建另外两个进程(一个父P,另一个是子C2)。子进程C1将返回0,因此它将检查第二个条件,第二个条件再次创建另外两个进程(一个父C1,另一个是子C3)。
4. C1返回正整数,因此它将进一步创建两个以上的进程(一个父C1,另一个是子C4)。子级C3返回0,因此它将直接打印1。

范例2:
以下代码的输出是什么?

#include 
#include 
  
int main()
{
    if (fork()) {
        if (!fork()) {
            fork();
            printf("1 ");
        }
        else {
            printf("2 ");
        }
    }
    else {
        printf("3 ");
    }
    printf("4 ");
    return 0;
}

输出:

2 4 1 4 1 4 3 4 

叉2
解释:
1.将创建两个进程,一个父P(具有子进程的进程ID),另一个是子C1(进程ID = 0)。
2.当条件为真时,父P执行if语句,子C1执行else语句并打印。3.父P检查下一个if语句并创建两个进程(一个父P和子C2)。在if语句中,我们使用not运算符(即!),它对子进程C2执行,父P执行else部分并打印值2。子C2
进一步创建两个新进程(一个父C2,另一个是子C3)。

范例3:
以下代码的输出是什么?

#include 
#include 
  
int main()
{
    if (fork() && (!fork())) {
        if (fork() || fork()) {
            fork();
        }
    }
    printf("2 ");
    return 0;
}

输出:

2 2 2 2 2 2 2 

叉3
解释:
1. Fork将创建两个进程,一个父进程P(具有新子进程的进程ID),另一个创建子进程C1(进程ID = 0)。
2.在if语句中,我们使用AND运算符(即&&),在这种情况下,如果第一个条件为假,则它将不评估第二个条件并打印。2.父进程P检查第二个条件并创建两个新进程(一个父进程) P和其他是子C2)。在第二种情况下,我们使用NOT运算符,该运算符为子进程C2返回true,并执行内部if语句。
3.子级C2再次创建两个新进程(一个父级C2和子级C3),并且我们使用OR运算符(即||)在第一个条件为假时评估第二个条件。父级C2执行if部分并创建两个新进程(一个父级C2和子级C4),而子级C3检查第二个条件并创建两个新进程(一个父级C3和子级C5)。
4.父级C3输入if并进一步创建两个新进程(一个父级C3和一个子级C6)。

想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。