先决条件:fork,fork和二叉树的基础知识,
范例1:
以下代码的输出是什么?
#include
#include
int main()
{
if (fork() || fork())
fork();
printf("1 ");
return 0;
}
输出:
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
解释:
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
解释:
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)。