Fork() - 一个新的过程

时间:2013-05-21 02:40:27

标签: linux process exec creation

Fork() - 进程将最终在内核中调用do_fork(),并自行生成一个精确的副本。当我阅读书籍时,它表示fork的子句将调用exec来创建新进程。

示例:

命令在shell上,将以这种方式创建。

   sh(Parent)
       |
   sh(Child)
       |
   ls(New Process)

但是,我无法理解&调用exec *()的地方? 因为,我所能看到的是shell(子)是在fork中创建的。 但是,何时何地创建/执行新流程?

1 个答案:

答案 0 :(得分:2)

如果您确实希望在其中一个进程中运行新程序(通常是子进程但不是绝对必要的话),那么

必须exec()。在shell执行ls的特定情况下,shell首先分叉,然后子进程执行。但重要的是要意识到这是两个不同的操作。

所有fork()会给你两个(几乎)相同的进程,然后你可以使用fork()的返回代码来决定你是否是父进程(你获得了孩子的正PID) ,如果fork()失败,则为-1)或子项(您得到0)。

有关fork()exec()如何协同工作(您的控件下)以及如何相互使用它们的说明,请参阅this answer。< / p>

do_fork()类似,exec内容归结为do_execve中对{{1}}的调用。