工作和流程有什么区别?

Oli*_*nde 56 process job-control terminology

“工作”和“过程”有什么区别?

Sha*_*off 54

进程是具有自己地址空间的任何正在运行的程序。

作业是 shell 使用的一个概念 - 您以交互方式启动的任何不分离的程序(即,不是守护程序)都是作业。如果您正在运行交互式程序,则可以按CtrlZ暂停它。然后您可以在前台(使用fg)或后台(使用bg)重新启动它。

当程序暂停或在后台运行时,您可以启动另一个程序 - 然后您将运行两个作业。您也可以通过附加一个“&”像这样在后台启动一个程序运行:program &。该程序将成为后台工作。要列出您正在运行的所有作业,您可以使用jobs.

有关作业的更多信息,请参阅bash 手册页的这一部分

  • 管道命令,如`ls | sort` 是一项工作,但每个命令都作为不同子 shell 进程的子进程运行。这是一个由多个进程组成的作业示例。您对工作的定义如何解释工作可以由多个流程组成? (3认同)

eph*_*ent 36

UNIX 有单独的概念“进程”、“进程组”和“会话”。

您在登录时获得的每个 shell 都成为其自己的新会话和进程组的领导者,并将终端的控制进程组设置为自己。

shell 在当前会话中为它启动的每个“作业”创建一个进程组,并将它启动的每个进程放入适当的进程组中。例如,ls | head是一个包含两个进程的管道,shell 将其视为单个作业,并将属于一个新的进程组。

进程是执行线程和其他上下文(例如地址空间和文件描述符表)的(集合)。一个进程可以启动其他进程;除非采取其他操作,否则这些新进程将与父进程属于同一进程组。每个进程也可能有一个“控制终端”,它与其父进程一样开始。

Shell 具有“前台”作业和“后台”作业的概念。前台作业是控制终端的进程组,后台作业是不控制终端的进程组。

每个终端都有一个前台进程组。将作业带到前台时,shell 将其设置为终端的前台进程组;将作业置于后台时,shell 会将终端的前台进程组设置为另一个进程组或自身。

如果进程在前台进程组中,它们可以读取和写入其控制终端。否则,它们接收SIGTTINSIGTTOU上尝试信号分别从读和写操作,将终端。默认情况下,这些信号会暂停进程,尽管大多数 shell 会屏蔽,SIGTTOU以便后台作业可以不间断地写入终端。

  • 这是对 shell 和终端进程管理的一个很好的、简洁的概述。可以通过提及“作业”是一个“管道”来改进它,它可以是一个进程组中连接在一起的多个进程。 (2认同)