c - 我们可以使用 c 在 linux 中创建一个进程有多少种方法

标签 c linux shell

我对在 Linux 中创建进程感到困惑。到目前为止,我认为我们可以通过调用以下系统调用来创建进程。

  1. system()
  2. exec() 系统调用族
  3. fork() 系统调用

但是:

  1. system():但是当“系统”系统调用在 shell 上执行输入可执行文件时,shell 正在创建一个子进程来执行输入。这里 shell 正在调用子进程,然后我们可以说 fork 正在为此创建进程。

  2. exec 系列系统调用: 由于该系列系统调用用新进程覆盖了当前正在运行的进程。所以它也创建了一个新进程,但使用相同的地址空间。正如我认为的那样,它也在调用 call fork 来创建流程。

我对以上所有是创建新进程或仅创建 fork 系统的可能方式感到困惑。

最佳答案

exec 系列系统调用不会调用 fork,也不会创建新进程。 它只会用新的二进制文件覆盖现有进程。

linux用户程序中,fork是唯一创建新进程的函数。虽然fork在内部调用clone 和其他系统调用。

另一方面,system 只是forkexec 的包装器。创建进程的实际任务是由 system 中的 fork 完成的。 所以 system 不是创建新进程的方法。

关于c - 我们可以使用 c 在 linux 中创建一个进程有多少种方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21205723/

相关文章:

python - Cython 基本构建仍然失败

c++ - 从位数组中提取任何更聪明的方法?

c++ - 什么是流行的、多平台的、免费的、开源的套接字库

c++ - 在 Windows 和 Linux 下处理不同源目录和对象目录的 Makefile

bash - 第二个过程从哪里来

shell - 在 shell 脚本中传递 su 密码

c - 字符串比较

linux - 如何不因发送电子邮件而被列入黑名单、垃圾邮件/垃圾邮件?

linux - 保留位含义

linux - 如何为脚本中特定字符后发现的每个单词生成新行,并从新行前面的行添加第一个单词