【发布时间】:2012-01-12 03:48:21
【问题描述】:
过去几天我一直在学习 fork() 函数,并且一直在做一些实验以了解它的实际工作原理。在这样做的过程中,我发现了一段我无法理解的有趣代码。代码如下:
int main(int argc, char *argv[])
{
int p,m;
p = getppid();
printf("%d\n",p);
if(fork() == 0) {
p = getppid();
printf("%d\n",p);
}
if(fork() == 0) {
p = getppid();
printf("%d\n",p);
}
if(fork() == 0) {
p = getppid();
printf("%d\n",p);
}
if(fork() == 0) {
p = getppid();
printf("%d\n",p);
}
return 0;
}
对此的输出是:
$./a.out
6117
6460
1
user@ubuntu:~/forkbomb$ 1
1
1
1
1
1
1
1
1
1
1
1
6473
如果您向我解释为什么 init 的 pid 为 1 会出现在输出中,那您会非常好。 如果有帮助,我想澄清一下我试图从给定的进程创建 5 个进程。那么你能告诉我正确的方法吗? 谢谢
【问题讨论】:
-
对于初学者,您不创建 5 个进程。我认为您正在创建 16 个进程。由于您没有在父节点中等待 产生子节点,因此子节点被 init 收养,因此 ppid 为 1。
标签: c operating-system posix fork system-calls