fork()
用于创建子进程...您也会看到此调用也出现在子进程中。我不明白当他们说'调用fork实际上返回两次'时它意味着什么。
这是什么意思......
if (fork() == 0)
/* the child process's thread executes here*/
else
/*the parent process's thread executes here*/
以上代码是父母或子女的一部分。你能用简单的英语解释发生了什么吗?
另外,为什么要使用fork()
?它说unix中的所有进程都是由这个系统调用的吗?你如何fork()
其他程序可以运行?你是否指定了程序的名称?
答案 0 :(得分:1)
当他们说它返回两次时的意思是,调用在父进程(调用它)中返回一次,并且在子进程中返回一次(尽管你可能认为孩子继承了从父母那里调用fork
的行为,就像它继承了很多其他内容一样。)
代码段利用了从fork
获取不同返回值的事实,具体取决于您是父进程还是子进程。
子进程获得零,父进程获取子进程的非零进程ID。
如果fork
由于某种原因失败,您也可以返回-1,在这种情况下,孩子将不会运行。这也是你应该检查的东西。
而且,虽然fork
用于创建新的进程,但是exec
系列调用,它们将新的程序加载到这些进程中: fork
本身无法做到这一点。
可以找到here的完整概述。
答案 1 :(得分:1)
有点像这样:
Process 1 Process 2
int main() {
...
int x = goo();
...
int y = fork();
// fork() returns... // ... but also here!
// here y = 123 // here y = 0
if (y) { if (y) {
// this happens // false
} else { } else {
// false // this happens
} }
int z = baz(); int z = baz();
... ...
return 0; return 0;
} }
当进程2生效时,程序存在两次,第二个进程以fork()的返回开始。由于程序在两个进程中都是相同的,因此区分哪个进程的唯一方法是使用fork()的返回值。