fork-面试题

这是EMC的一道面试题

1
2
3
4
5
6
7
8
#include<stdio.h>
#include<unistd.h>
int main()
{
fork() && fork() || fork(); //这句话共创建几个进程?
return 0
}

本题有两个知识点:

  • 对逻辑运算符的理解
  • 对fork的理解

如果是A && B || C这样一个表达式,运行情况是怎样的呢?

  • A为0,不再判断B,直接判断C
  • A不为0
    • B为0,继续判断C
    • B为1,不再判断C

fork调用的奇妙之处在于他被调用一次,会返回两个值

  • 在父进程中,返回新创建进程的ID
  • 在子进程中,返回0

下面来分析fork() && fork() || fork()创建了几个进程

fork

很明显,fork() && fork() || fork()创建了4个进程