作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
谁能给我这段代码的输出(带解释)?谢谢...
#include <stdio.h>
#include <unistd.h>
int main()
{
if (fork() && (!fork())) {
if (fork() || fork()) {
fork();
}
}
printf("Friend\n");
return 0;
}
最佳答案
在进入代码之前,最好先了解什么是 fork() 系统调用
fork() 系统调用通过“父”进程创建一个新进程,新创建的进程称为“子”进程
fork成功时子进程返回0,父进程返回正整数
这就是线索
因此,从该程序计数器开始,所有两个进程同时工作......
这里 fork() 处于 if 条件中,在猜测输出时也有点棘手
第一个 fork() 创建新的 C1 -> 0
第二个 fork() 创建新的 C2 -> !0 -> 1
因此第一个条件由 C2 (其父正整数和 c2 的 0)满足,但不由父或子 C1 满足,因此其他 fork 将不起作用
然后C2进入另一个if条件并进行另外两个 fork
C2
/ \
C2 C3
/ \ / \
C2 c4 c3 c5
然后所有创建的进程(包括父进程)都会打印“Friend”输出 7 次
关于c - 当 fork() 处于某个条件时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60219934/
我创建了一个分支来开发新功能。由于这个新功能完全是作为一个新项目开发的,唯一可能的冲突来源是解决方案文件。 随着功能的开发,主分支更新了几次。当我完成开发和测试时,我做了: git checkout
我是一名优秀的程序员,十分优秀!