答案1
这取决于你所说的“程序”是什么意思。
首先,视频摘录中的内容具有误导性:“该会议以一开始工作,包含shell进程。“ 正如中所解释的作业和流程有什么区别?并且正如POSIX 工作定义, A工作 是一个 shell 概念。因此,正在运行的 shell 本身并不是一项作业,除非它是来自父shell进程。在摘录中,父进程是终端其中,正如中所解释的巴什指南,只是一个图形界面程序,用于运行基于文本的界面程序,这些程序不一定是 shell。
下面是一些命令来说明该表来自TTY 揭秘是准确的:
$ cat
hello
hello
^Z
[1]+ Stopped cat
$ cat | sort
^Z
$ jobs
[1]- Stopped cat
[2]+ Stopped cat | sort
您可以在最后的输出中看到存在两个作业:cat
和cat | sort
,后者相当于ls | sort
表中的 。
至于“bash运行的程序是否在新作业中运行”,POSIX定义:
工作
一组进程,包括 shell 管道及其派生的任何进程,它们都位于同一进程组中。
因此,如果您认为“一组包含 shell 管道的进程”是一个正在运行的程序(您可以根据程序是一组要执行的指令来判断),那么是的。
但由于“程序”是一个比“shell 管道”更通用的概念,因此 bash 运行的程序通常并不在新作业中运行。例如cat
, 和sort
也是程序,但它们并不各自在单独的作业中运行。
还,shell 内置函数是“程序”,因为它们是“指令集”。但它们是 shell 程序本身的嵌入式组件,因此不一定需要创建单独的子进程来执行。在它们不是在单独的子进程中执行的情况下,它们不能成为 shell 作业的一部分。
答案2
是的,它确实。您可以通过在 ^Z 之后输入来从 shell 中生成它bg
,它将继续在自己的 PID 下运行。