对于fork函数的理解有两点是我匪夷所思的:
- 为什么这个函数会有两个返回值
- 当这个函数返回时,父进程和子进程都会执行哪段代码
#include <iostream>
using namespace std;
int main() {
int pid;
if ( (pid=fork()) == 0) {
cout << "child process" << endl;
}
cout << "Hello, World!" << endl;
return 0;
}
上述代码会输出几个“Hello, World!”?
答案是两个。大致的描述下我的理解。
- 第一次语句 (pid=fork()) == 0 返回子进程的ID,子进程ID 不等于0 ,所以不进入判定式。 这个是在父进程中返回的。
第二次语句 (pid=fork()) == 0 会返回0, 这个0是在子进程中返回的,判定式成立,进入判定式的内容,也就是子进程会执行if语句中的内容,而父进程不会执行if语句中的内容 - 父进程会执行一次“Hello, World!”
- 子进程执行完以后,回继续执行后面的代码,也就是说子进程和父进程会共享代码段!!!
fork函数应该是和系统相关的,我并不知道windows中会有这个类似的函数。
例子:
#include <iostream>
using namespace std;
int main() {
int pid;
if ( (pid=fork()) == 0) {
cout << "child process" << endl;
exit(0);
}
cout << "Hello, World!" << endl;
return 0;
}
上述代码会输出几个“Hello, World!”?
答案是一个