如何解决在 C 中分叉的输出
给定 PID = 4224 为什么我得到以下代码片段的输出:
x = 10922 y = 0 我正在处理:10923 x = 0 y = 2 我正在处理:10922 x = 0 y = 2 我正在处理:10922 x = 0 y = 0 我正在处理:10924
对于此代码:
console.log(canvas.getBoundingClientRect())
解决方法
让我们从程序的输出开始:
x = 0 y = 2
I am process: 330161
x = 330161 y = 0
I am process: 330162
x = 0 y = 0
I am process: 330163
请注意,订单与您的有点不同。那是因为哪个进程先运行取决于环境。因此,让我们稍微修改一下您的程序,使其更加清晰:
#include <stdio.h>
#include <unistd.h>
int main() {
int x = 1,y = 2;
int pid;
x=fork();
if(x==0){
pid = getpid();
printf("1:x = %d y = %d I am process %d\n",x,y,pid);
}
fflush(NULL);
y = fork();
if(y==0){
pid = getpid();
printf("2:x = %d y = %d I am process %d\n",pid);
}
return 0;
}
通过将 printf 与单个换行符放在一起,我们可以放心,每个语句都属于一个进程,它们不会交错。
通过在行 1:,2:
的开头添加一个指示符,我们知道它们来自哪个 printf()。 fflush() 防止子进程从 stdio 继承任何部分缓冲的写入——如果你在终端上,这不是问题,但如果你重定向到一个文件,你可能会发现重复的行。所以我系统上的输出看起来像:
1:x = 0 y = 2 I am process 330214
2:x = 330214 y = 0 I am process 330215
2:x = 0 y = 0 I am process 330216
由此可知,主进程的第一个子进程是330214,第二个是330215;孙子(孩子的孩子)是 330216。 我希望这足以让您找出答案。
不要害怕使用这些示例程序。这是了解系统工作情况的好方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。