【发布时间】:2013-07-16 11:12:22
【问题描述】:
这是一个代码,我一个接一个地使用 2 个 fork() 系统调用 - 它实际上是如何工作的?
#include <unistd.h>
#include <iostream.h>
using namespace std;
int main()
{
cout << "0. I am process " << getpid() << endl;
(void) fork();
cout << "1. I am process " << getpid() << endl;
(void) fork();
cout << "2. I am process " << getpid() << endl;
}
我得到的输出是:
0.我是进程27701
1.我是进程25915
1.我是进程27701
2.我是进程27781
2.我是进程26170
2.我是进程27701
这是我使用 3 个 fork 系统调用的下一个程序,我如何获得这样的输出?如果我要手动解决此代码,逻辑是什么?
#include <unistd.h>
#include <iostream>
using namespace std;
int main()
{
cout << "0. I am process " << getpid() << endl;
(void) fork();
cout << "1. I am process " << getpid() << endl;
(void) fork();
cout << "2. I am process " << getpid() << endl;
(void) fork();
cout << "3. I am process " << getpid() << endl;
}
在这里我得到输出:
0.我是进程27116
1.我是进程26147
2.我是进程27371
2.我是进程26147
3.我是进程24416
3.我是进程27371
3.我是进程27508
3.我是进程26147
1.我是进程27116
2.我是进程21406
2.我是进程27116
3.我是进程27369
3.我是进程21406
3.我是进程26752
3.我是进程27116
【问题讨论】:
-
关于
fork在这种复杂情况下如何工作的问题有很多。画个图就好了。 -
我需要逻辑来画图!如果可能的话,请把逻辑解释给第一个程序,如果我理解了,我会自己尝试第二个程序。
-
你的第一个程序应该输出 4 批标记为
2的行,有 4 个不同的 PID。 25915 的输出发生了什么变化?
标签: linux unix system-calls fork