c - fork() 之后进程从哪里开始执行
问题描述
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
int main(void) {
for (int i = 1; i < 4; i++) {
printf("%d", i);
int id = fork();
if (id == 0) {
printf("Hello\n");
exit(0);
} else {
exit(0);
}
}
return 0;
}
对于此代码,它会在我的计算机上打印 11Hello。这对我来说似乎违反直觉,因为“1”被打印了两次,但它是在调用 fork() 之前。
解决方案
fork() 系统调用 fork 一个新进程,并在每个进程中并行执行跟在它后面的指令。在您的子进程将 i 的值打印到标准输出后,它会被缓冲,然后再次打印“i”的值,因为标准输出没有被刷新。
使用fflush(stdout);
'i' 每个叉子只打印一次。
或者,您也可以使用printf("%d\n", i);
末尾的换行符来完成这项工作。
推荐阅读
- python - Pygame 在空闲但不在 pycharm 上工作
- r - R完全互连的加权图
- javascript - 执行后在 JavaScript 中延迟
- terraform - 使用 cURL 调用 Terraform REST API
- python - python如何重新引发已经捕获的异常?
- android - “Ionic cordova build android”错误
- javascript - javascript计时器和html进度条替换html
- javascript - 无法绑定到“ngForOf”,因为它不是“tr”的已知属性。甚至导入 CommonModule/BrowserModule
- python - 在 Ubuntu 上安装 Anaconda 不起作用
- vba - 复制粘贴 VBA 问题