【问题标题】:Why we create new processes using fork() or exec() system calls?为什么我们使用 fork() 或 exec() 系统调用创建新进程?
【发布时间】:2017-02-18 18:23:31
【问题描述】:

正如我们在课堂上所学到的,新进程是使用 fork()exec() 系统调用创建的。

假设我们使用 fork() 创建了一个子进程,这个新创建的进程的目的是什么?我们为什么要创建这个流程?

我在询问我们必须创建新流程的应用程序。

【问题讨论】:

    标签: process fork exec


    【解决方案1】:

    创建新进程的几个示例用法:

    • 在shell 环境中,您运行的每个命令(如ls)都是它自己的二进制文件。主shell程序将fork()然后执行相关实用程序。
    • Web 服务器(例如 Apache httpd 服务器)将使用 fork() 创建一个新进程来处理单独的请求。
    • 某些网络浏览器(例如 Chrome)会为每个打开的标签页创建新进程,以便利用不同进程之间的隔离来提高安全性。
    • 每次您通过 GUI 菜单(例如 Windows 中的开始菜单或 MacOS 中的停靠栏)打开应用程序时,桌面环境都会派生并执行新进程
    • 在构建代码时构建系统(例如 make fork 和执行编译器)作为单独的进程。

    还有很多其他的例子,但这些是一些当您可能需要在一个程序中使用多个进程的示例。

    【讨论】:

    • 我们可以在不使用 fork() 和任何系列的 exec() 系统调用的情况下运行 shell 命令吗?
    • 简短回答 -> 除非您希望关闭调用 shell 命令的程序,否则不会。长答案 -> 理论上 有可能找到一种方法来做到这一点。但它不会远程独立于平台,不值得做,而且对于同时包含两个或更多实用程序的任何 shell 命令来说,它都将完全不适用。
    猜你喜欢
    • 2017-05-19
    • 2015-12-16
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    • 2011-10-03
    • 2016-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多