【问题标题】:What are the ways to create a new process in C?在 C 中创建新进程的方法有哪些?
【发布时间】:2022-01-19 06:38:36
【问题描述】:

我想知道有没有其他方法可以在 C 中创建一个新进程。 我知道fork 创建了一个子进程。 另外,使用exec,我可以替换当前正在执行的程序,但它不会创建新进程。

【问题讨论】:

  • Exec 没有创建进程。 posix_spawn()vfork() 浮现在脑海中。 Linux 也有clone(),Windows 有CreateProcess()...
  • 还有system。但与其他人不同的是,它不是系统调用。
  • exec 不会取代进程;它基本上取代了当前进程正在执行的程序
  • 一些方式分享了@98​​7654321@。您可以阅读question的其他答案。
  • 你想做什么,你不能用forkclone(微调叉)和exec(家庭)?

标签: c linux process fork exec


【解决方案1】:

据我所知,只有forkvforkclone 用于在linux 中创建新进程。 (posix_spawn 不是系统调用,而是使用上述系统调用之一来创建进程的库函数。

exec(及其同级函数)用于“变异”进程,根据给定的 ELF 文件更改其内存布局。

(下面的示例是一个非常简化的流程版本,省略了很多内容)

例如,当您从bash 终端运行命令时,它使用fork(或克隆)。在fork 系统调用之后,会创建一个新进程,它的内存布局与您的bash 终端完全相同(要更好地理解它,请阅读VirtualizationCOW, Copy-On-Write)。之后,新进程调用execv(或类似函数)来执行命令给它的ELF。

【讨论】:

    猜你喜欢
    • 2015-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多