首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么这个程序打印4次"forked!“?

为什么这个程序打印4次"forked!“?
EN

Stack Overflow用户
提问于 2014-11-03 22:30:50
回答 3查看 13.3K关注 0票数 76

为什么这个程序打印4次“forked!”?

代码语言:javascript
复制
#include <stdio.h>
#include <unistd.h>

int main(void) {

  fork() && (fork() || fork());

  printf("forked!\n");
  return 0;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-11-03 22:46:24

第一个fork()在调用进程中返回一个非零值(称为p0),在子进程中返回0(称为p1)。

在p1中,使用&&的短路,进程调用printf并终止。在p0中,进程必须计算表达式的其余部分。然后它再次调用fork(),从而创建一个新的子进程(p2)。

在p0中,fork()返回一个非零值,||的短路被采用,因此该进程调用printf并终止。

在p2中,fork()返回0,因此必须计算||的剩余部分,这是最后一个fork();这导致为p2创建一个子级(称为p3)。

然后,P2执行printf并终止。

然后,P3执行printf并终止。

然后执行4个printf

票数 86
EN

Stack Overflow用户

发布于 2014-11-04 06:18:52

我喜欢所有已经提交的答案。如果您在printf语句中多添加几个变量,您可能会更容易看到发生了什么。

代码语言:javascript
复制
#include<stdio.h>
#include<unistd.h>

int main(){

   long child = fork() && (fork() || fork());
   printf("forked! PID=%ld Child=%ld\n", getpid(), child);
   return 0;
}

在我的机器上,它生成了以下输出:

代码语言:javascript
复制
forked! PID=3694 Child = 0
forked! PID=3696 Child = 0
forked! PID=3693 Child = 1
forked! PID=3695 Child = 1
票数 8
EN

Stack Overflow用户

发布于 2012-12-02 02:17:19

这段代码:

代码语言:javascript
复制
fork();
fork() && fork() || fork();
fork();

为自己获取20个进程,而Printf将执行20次。

和用于

代码语言:javascript
复制
fork() && fork() || fork();

printf将总共执行5次。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26716255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档