从这文章:
Sourcing 将执行命令在当前 shell 中,执行将创建一个新的shell并在那里执行命令。
他描述说每个 shell 都有自己的 PID。我看不出 shell 和进程这两个词有什么区别,至少在他的上下文中 shell 这个词的用法没有区别。
答案1
一个(正在运行的)shell 是一个进程,但并非所有进程都是 shell。
所有正在运行的应用程序和守护进程都是进程。唯一运行但不是进程的是内核(包括内核线程)。内核(至少在类 Unix 操作系统上)会启动一个(或多个)初始手工进程,通常称为init
。这些进程是整个其他进程层次结构的父进程。当您运行ps
或top
命令时,您会看到每个进程都有自己独特的PID
。
当您登录到终端仿真器时,您将启动一个交互式 shell,例如sh
、dash
、ksh
、等。这些 shell 会解释您在终端窗口中输入的命令,例如、bash
和。后者不是 shell,而是可执行二进制文件。zsh
ls
cat
date
您还可以运行 shell 脚本,它们是包含要由 shell 执行的命令的文本文件。
由于并非所有程序都是 shell 脚本或交互式 shell 会话,因此不能说 shell 是进程的同义词。
答案2
不是。贝壳是一种程序。
在上下文中,作者正在谈论执行该特定类型程序的进程:shell 进程。该句子只是以缩写形式写成的(并且还缺少连词)。它可以写成:
获取脚本将在当前 shell 进程中执行命令,而执行脚本将产生一个新的 shell 进程并在那里执行命令。
这篇文章是在这样一个背景下编写的:很明显,shell(特别是 Bourne Again shell)、脚本和进程是讨论的主题。上下文在这里很重要。
壳是“操作系统作为一个整体”隐喻的一部分。