gpt4 book ai didi

linux - 关于 fork 和 execve 系统调用

转载 作者:IT王子 更新时间:2023-10-29 00:08:15 27 4
gpt4 key购买 nike

据说fork系统调用创建一个调用进程的克隆,然后(通常)子进程发出execve系统调用来改变它的图像并运行一个新的过程。为什么要分两步?

顺便说一句,execve 代表什么?

最佳答案

分两步的原因是灵 active 。在这两个步骤之间,您可以修改新执行的程序将继承的子进程的上下文。

您可能想要更改的一些内容是:

  • 文件描述符
  • 用户/组 ID
  • 进程组和 session ID
  • 当前目录
  • 资源限制
  • 安排优先级和亲和力
  • 文件创建掩码(umask)

如果您没有拆分 fork 和 exec,而是有一个类似 spawn 的系统调用,如果您希望在子进程中以不同方式设置它们,则需要为每个进程属性获取参数。例如,请参阅 Windows API 中 CreateProcess 的参数列表。

使用 fork/exec,您可以在执行新程序之前更改您想要在子进程中的任何可继承进程属性。

设置文件描述符是子进程上下文中最常更改的内容之一。如果要捕获程序的输出,通常会使用 pipe(2) 系统调用在父进程中创建一个管道,并在 fork(2)ing 之后,关闭父进程中的写入端并关闭在调用 execve(2) 之前在子进程中读取结束。 (您还将使用 dup(2) 将管道的子端设置为文件描述符 1 (stdout))。这在单个系统调用中要么是不可能的,要么是有限制的。

关于linux - 关于 fork 和 execve 系统调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/926185/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com