Fork() - 进程将最终在内核中调用do_fork(),并自行生成一个精确的副本。当我阅读书籍时,它表示fork的子句将调用exec来创建新进程。
示例:
命令在shell上,将以这种方式创建。
sh(Parent)
|
sh(Child)
|
ls(New Process)
但是,我无法理解&调用exec *()的地方? 因为,我所能看到的是shell(子)是在fork中创建的。 但是,何时何地创建/执行新流程?
答案 0 :(得分:2)
您必须exec()
。在shell执行ls
的特定情况下,shell首先分叉,然后子进程执行。但重要的是要意识到这是两个不同的操作。
所有fork()
会给你两个(几乎)相同的进程,然后你可以使用fork()
的返回代码来决定你是否是父进程(你获得了孩子的正PID) ,如果fork()
失败,则为-1)或子项(您得到0)。
有关fork()
和exec()
如何协同工作(您的控件下)以及如何相互使用它们的说明,请参阅this answer。< / p>
与do_fork()
类似,exec
内容归结为do_execve
中对{{1}}的调用。