【发布时间】:2014-09-10 13:16:07
【问题描述】:
这不在代码审查中,因为我不了解代码的完整概念。如果仍然需要移动,请告诉我。
我有一些代码,我想解释一下我对它的想法,我希望有人能告诉我哪里出了问题或感到困惑,因为我仍然不完全确定发生了什么。
#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
int main()
{
pid_t pid, pid1;
pid = fork();
if (pid < 0) {
fprintf (stderr, “fork() failed\n”);
return(1);
}
else if (pid == 0) {
pid1 = getpid();
printf (“pid = %d\n”, pid); // A
printf (“pid1 = %d\n”, pid1); // B
}
else {
pid1 = getpid();
printf (“pid = %d\n”, pid); // C
printf (“pid1 = %d\n”, pid1); // D
wait (NULL);
}
return 0;
}
据我了解,我们有两个进程 ID,父 (pid) 和子 (pid1)。
一旦我调用pid = fork(),我相信孩子被启动并被赋予0的id,而父母得到孩子的ID,比如说1337。所以pid = 1337和pid1 = 0。
所以我们跳过第一个if,因为没有发生错误(pid if,因为pid不等于0,然后我们输入最终的if,其中C将打印 1337 和 D 将输出 0。
我认为这会等到孩子完成。
之后,我假设复制的进程 (fork()) 将运行 else if (pid == 0),但我不知道为什么,因为 pid 仍然是 1337..
TLDR:如果应该先执行第三个if,那么我如何到达第二个if,但如果这个逻辑完全错误,请纠正我。
【问题讨论】:
-
请缩进你的代码。总是。
-
@MichaelWalz 刚刚做了,我的错
-
阅读维基页面fork、手册页fork(2)和Advanced Linux Programming;这些困难的事情解释了无数次!
-
@BasileStarynkevitch 我知道并且我理解,但仍然没有点击,因此我在这里问我通常会在哪里获得几个视图和/或解释。