#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;
}
Run Code Online (Sandbox Code Playgroud)
对于此代码,它在我的计算机上打印 11Hello。这对我来说似乎违反直觉,因为“1”被打印了两次,但它是在调用 fork() 之前。
小智 1
fork() 系统调用分叉一个新进程,并在每个进程中并行执行其后面的指令。在您的子进程将 i 的值打印到 stdout 后,它会被缓冲,然后再次打印“i”的值,因为 stdout 未刷新。
使用fflush(stdout);
以便每个叉子只打印一次“i”。
或者,您也可以使用printf("%d\n", i);
末尾的换行符来完成这项工作。