作业和流程有什么区别?

作业和流程有什么区别?

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

答案1

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

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

当程序挂起或在后台运行时,您可以启动另一个程序 - 然后您将运行两个作业。您还可以通过附加“&”来启动在后台运行的程序,如下所示:program &。该程序将成为后台作业。要列出您正在运行的所有作业,您可以使用jobs

有关职位的更多信息,请参阅本节bash 手册页的内容。

答案2

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

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

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

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

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

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

如果进程位于前台进程组中,则可以对其控制终端进行读取和写入。否则,它们会分别接收尝试读取和写入终端的信号SIGTTIN并发出信号。SIGTTOU默认情况下,这些信号会挂起进程,尽管大多数 shell 都会进行屏蔽,SIGTTOU以便后台作业可以不间断地写入终端。

答案3

作业和流程是相关但不同的概念。

  • 进程是当前在系统上运行的程序的实例。它有自己的内存空间、文件描述符和唯一的进程ID (PID)。

  • 作业是用户想要执行的工作单元,它可以由一个或多个进程组成,并且可以通过作业控制命令进行管理。作业也有自己的作业 ID (JID)。

答案4

上面的定义非常技术性,但也许操作员想要更多的日常澄清。我认为工作是一个预定的过程。当我们处理一般流程时,不一定有调度的概念,但是当我们使用“作业”这个词时,我们总是意味着它是被调度的,或者像循环一样重复,它就像一个工人。

相关内容