首页 > 试题广场 >

如下代码一共创建多少个进程(包含主进程): int mai

[单选题]
如下代码一共创建多少个进程(包含主进程):
int main(int argc, char* argv[]) {
    fork();
    fork() && fork() && fork();
    fork() || fork();
}
  • 15
  • 18
  • 21
  • 24
首先需要明白的是fork()生成1个子进程,fork()之后有两个进程处于执行状态。
因此执行完第一个fork(),生成的进程数是1(main)+1(子进程)
看第二行的fork() && fork() && fork(),执行完第一个fork(),父进程返回非0,子进程返回0,子进程后面的fork()均不会执行,此时产生了1个子进程,那么三个fork()就产生了3个子进程(注意,这是1个进程产生的),因此执行完第二行,产生了6个子进程,系统中一共有8个进程在执行,要是不明白的自己画个二叉树就清楚了。
在看第三行,fork() || fork(),原理和第二行相同,只是只有子进程才能继续,父进程只能执行第一个fork(),执行这一行每个进程可以产生两个子进程,也就是一***生2 * 8 = 16个子进程
所以答案就是 2 + 6 + 16 = 24
编辑于 2019-09-02 20:44:31 回复(4)
          1                      1     一个main  一个子进程
    1    1    1        1      1      1   第二行使每个父进程生出3个子进程
第三行,以上所有进程为父进程,每个父进程生出两个子进程
          11                     11
11     11  11       11   11      11
数1的个数
发表于 2019-11-23 09:46:17 回复(0)

fork()调用后将,从启动fork()的这个进程(父进程)中,把代码和已有的变量拷贝一份,用于启动一个一模一样的子进程,两个进程将执行fork()系统调用之后的下一条指令。

同时,调用fork()处的返回值在父进程和子进程中是不同的,在父进程中的调用处将返回生成的子进程的进程ID,在子进程中则返回0。

若是frok()因为内存不足等原因创建子进程失败,它将在调用处返回一个负值。

发表于 2020-10-18 21:43:50 回复(0)
第一行的fork将为main()函数创建一个子进程,此时共有2个进程。第二行的fork的第一个fork()函数将为2个进程创建一个子进程,此时将有4个进程。但子进程的返回值是0,所以第二个fork()函数只有2个父进程创建了2个子进程,此时将有6个进程。同理,第三个fork()也只有2个父进程创建了子进程,此时将有8个进程。第三行的fork的第一个fork()函数将这8个进程都创建了子进程,此时将有16个进程。但在第二个fork()函数中8个父进程将不能创建子进程,反而8个子进程因为返回值是0而得到创建子进程,此时又多了8个子进程,因此此时将有24个子进程。
发表于 2021-10-25 01:32:07 回复(0)
&&和||具有短路规则,当a&&b,若a是0,程序根本不会去看b是多少(反正肯定结果为0)。||同理,若a为1则忽视b(反正整条语句符合规则)。
发表于 2019-09-12 15:36:46 回复(0)
发表于 2020-08-06 20:45:26 回复(0)
发表于 2022-06-03 14:33:34 回复(0)
我觉得还是得画图比较好理解
发表于 2020-08-10 18:51:40 回复(0)
这个用简单的数学逻辑可以口算,fork()产生2进程,一个ID为0,一个ID为1,若直接调用6个fork()函数,则总进程为2*6个,由于惰性运算,对于|| ,只有0||0 不符合,存活率为3/4,对于&&运算,有0&&x&&x,1&&0&&x, 1&&1&&0, 4种情况不符合,存活率为1/2, 结果为2*6 *1/2 * 3/4 = 24.
发表于 2020-08-04 20:36:22 回复(1)

这是c语言中的,各位大兄弟

发表于 2019-10-28 08:42:35 回复(0)
可以看这个视频了解 fork 函数的使用 https://www.bilibili.com/video/av32769980

发表于 2019-09-02 22:26:23 回复(0)
哈哈,昨天刚好瞄了一眼看见答案是24,今天就给我出这道题了!
不懂,求解。
发表于 2019-08-29 12:38:44 回复(0)
这是C++吧?算是java?
发表于 2019-08-29 10:39:45 回复(0)
???
发表于 2019-08-28 22:03:27 回复(0)
??看不懂
发表于 2019-08-28 18:04:37 回复(0)
谢特😡
发表于 2019-08-28 11:28:36 回复(0)
java?
发表于 2019-08-28 09:45:31 回复(0)