Sha*_*off 54
进程是具有自己地址空间的任何正在运行的程序。
作业是 shell 使用的一个概念 - 您以交互方式启动的任何不分离的程序(即,不是守护程序)都是作业。如果您正在运行交互式程序,则可以按CtrlZ暂停它。然后您可以在前台(使用fg
)或后台(使用bg
)重新启动它。
当程序暂停或在后台运行时,您可以启动另一个程序 - 然后您将运行两个作业。您也可以通过附加一个“&”像这样在后台启动一个程序运行:program &
。该程序将成为后台工作。要列出您正在运行的所有作业,您可以使用jobs
.
有关作业的更多信息,请参阅bash 手册页的这一部分。
eph*_*ent 36
UNIX 有单独的概念“进程”、“进程组”和“会话”。
您在登录时获得的每个 shell 都成为其自己的新会话和进程组的领导者,并将终端的控制进程组设置为自己。
shell 在当前会话中为它启动的每个“作业”创建一个进程组,并将它启动的每个进程放入适当的进程组中。例如,ls | head
是一个包含两个进程的管道,shell 将其视为单个作业,并将属于一个新的进程组。
进程是执行线程和其他上下文(例如地址空间和文件描述符表)的(集合)。一个进程可以启动其他进程;除非采取其他操作,否则这些新进程将与父进程属于同一进程组。每个进程也可能有一个“控制终端”,它与其父进程一样开始。
Shell 具有“前台”作业和“后台”作业的概念。前台作业是控制终端的进程组,后台作业是不控制终端的进程组。
每个终端都有一个前台进程组。将作业带到前台时,shell 将其设置为终端的前台进程组;将作业置于后台时,shell 会将终端的前台进程组设置为另一个进程组或自身。
如果进程在前台进程组中,它们可以读取和写入其控制终端。否则,它们接收SIGTTIN
和SIGTTOU
上尝试信号分别从读和写操作,将终端。默认情况下,这些信号会暂停进程,尽管大多数 shell 会屏蔽,SIGTTOU
以便后台作业可以不间断地写入终端。