我对在 Linux 中创建进程感到困惑。到目前为止,我认为我们可以通过调用以下系统调用来创建进程。
system()
exec()
系统调用族fork()
系统调用
但是:
system():但是当“系统”系统调用在 shell 上执行输入可执行文件时,shell 正在创建一个子进程来执行输入。这里 shell 正在调用子进程,然后我们可以说 fork 正在为此创建进程。
exec 系列系统调用: 由于该系列系统调用用新进程覆盖了当前正在运行的进程。所以它也创建了一个新进程,但使用相同的地址空间。正如我认为的那样,它也在调用 call fork 来创建流程。
我对以上所有是创建新进程或仅创建 fork 系统的可能方式感到困惑。
最佳答案
exec
系列系统调用不会调用 fork
,也不会创建新进程。
它只会用新的二进制文件覆盖现有进程。
在linux
用户程序中,fork
是唯一创建新进程的函数。虽然fork
在内部调用clone
和其他系统调用。
另一方面,system
只是fork
和exec
的包装器。创建进程的实际任务是由 system
中的 fork
完成的。 所以 system
不是创建新进程的方法。
关于c - 我们可以使用 c 在 linux 中创建一个进程有多少种方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21205723/