程序或 bash shell 命令在 Linux 系统上到底如何工作?

程序或 bash shell 命令在 Linux 系统上到底如何工作?

我正在研究Linux系统中进程和shell如何工作。我想请教一下您,看看我的结论是否正确。

当我们启动系统时,内核启动 init 进程,其他所有进程都通过此进程的 fork 作为子进程运行。例如,当我运行任何程序时,都会为该程序 fork 出父进程,然后 fork 出的进程成为使用 exec 运行该程序的子进程(或子进程)。如果是这种情况,例如,当我运行 bash shell 时,父进程 fork 出,然后 exec 使 fork 出的进程成为 bash 程序将在其上运行的子进程。此时,我困惑的是,我们输入到 bash shell 中的命令是如何执行的。内置命令和外部命令是如何通过的?例如,内置命令是否会为其 fork 或创建子进程?

答案1

您所问的问题适用于所有 Unix,而不仅仅是 Gnu/Linux。

需要注意的是,在 a 之后fork,不需要执行。因此,对于 shell 内置命令,shell 将分叉,然后执行内置命令。

该 shell 还将创建一个子 shell。 shell 在不需要时不会分叉:例如,对于内置的简单命令。其中 simple 不包含在管道中。

还有(您的问题中未提及)管道。这些是在 fork 之前创建的,但在 之后fork和 之前连接,可选(请参阅内置)exec

相关内容