l***y 发帖数: 4671 | 1 程序是:
#include "stdio.h"
#include
#include
#include
#include
#include
using namespace std;
int main(){
string sIdentifier;
pid_t p1 = fork();
pid_t p2 = fork();
pid_t p3 = fork();
pid_t p4 = fork();
cout << "p1: " << p1
<< ", p2: " << p2
<< ", p3: " << p3
<< ", p4: " << p4
<
return 0;
}
结果是个全组合:
p1: 37133, p2: 37134, p3: 37135, p4: 37138
p1: 37133, p2: 37134, p3: 37135, p4: 0
p1: 37133, p2: 37134, p3: 0, p4: 37140
p1: 37133, p2: 0, p3: 37137, p4: 37142
p1: 37133, p2: 37134, p3: 0, p4: 0
p1: 37133, p2: 0, p3: 37137, p4: 0
p1: 0, p2: 37136, p3: 37139, p4: 37143
p1: 0, p2: 37136, p3: 37139, p4: 0
p1: 37133, p2: 0, p3: 0, p4: 37144
p1: 0, p2: 0, p3: 37141, p4: 0
p1: 37133, p2: 0, p3: 0, p4: 0
p1: 0, p2: 37136, p3: 0, p4: 37146
p1: 0, p2: 0, p3: 37141, p4: 37145
p1: 0, p2: 0, p3: 0, p4: 37147
p1: 0, p2: 0, p3: 0, p4: 0
p1: 0, p2: 37136, p3: 0, p4: 0
同学们,该咋理解 fork() 啊。。。 | x******n 发帖数: 9057 | 2 这不就是expected的结果么?
原来的进程(假设)是37132,第一次fork出来一个child进程37133,所以37132里打印
p1是37133,37133里打印p1是0.
然后第二次fork,37132 fork出了37134(继承了37132的p1),37133 fork出了37136
(继承了37133的p1),所以p1 p2分别是:
37132: 37133 37134
37134: 37133 0
37133: 0 37136
37136: 0 0
以此类推。
【在 l***y 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 程序是: : #include "stdio.h" : #include : #include : #include : #include : #include : using namespace std; : int main(){ : string sIdentifier;
|
|