Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Process 为什么fork+;exec用于在操作系统中创建新进程?_Process_Operating System_Fork - Fatal编程技术网

Process 为什么fork+;exec用于在操作系统中创建新进程?

Process 为什么fork+;exec用于在操作系统中创建新进程?,process,operating-system,fork,Process,Operating System,Fork,每个操作系统都使用相同的模型来创建新的进程。父对象自身分叉,然后执行子对象。但为什么这种模式如此受欢迎 在典型的fork+exec模型中,操作系统必须创建整个进程空间的副本(允许通过写时复制等方式进行一些优化),然后在执行完exec后,新程序的代码和数据/堆栈需要与其余元数据一起设置 现在,如果我可以直接调用操作系统并说有一个系统调用exec_new(),那么它就可以像上面一样做同样的事情,而不需要两个系统调用。所有者仍然是相同的UID。为什么不这样做?fork+exec模型给了我们什么 每个操

每个操作系统都使用相同的模型来创建新的进程。父对象自身分叉,然后执行子对象。但为什么这种模式如此受欢迎

在典型的fork+exec模型中,操作系统必须创建整个进程空间的副本(允许通过写时复制等方式进行一些优化),然后在执行完exec后,新程序的代码和数据/堆栈需要与其余元数据一起设置

现在,如果我可以直接调用操作系统并说有一个系统调用exec_new(),那么它就可以像上面一样做同样的事情,而不需要两个系统调用。所有者仍然是相同的UID。为什么不这样做?fork+exec模型给了我们什么

每个操作系统都使用相同的模型来创建新的进程。父对象自身分叉,然后执行子对象

这是不对的。这就是太监的模式。我不知道还有哪种操作系统是这样做的。其他系统包括模拟宦官的库函数,但这往往不是底层机制

例如。

大规模操作系统中的一个常见模型是命令解释器存在于进程的受保护区域中。一个在同一进程中运行多个程序。这与宦官shell形成对比,宦官shell只是一个使用您描述的机制启动其他程序的程序