Linux中“进程”,“线程”,“任务”和“作业”之间的区别和关系是什么?

当我学习web后端编程时,我对Linux中使用的一些术语感到困惑。

  • Linux中“进程”,“线程”,“任务”和“作业”之间的区别和关系是什么?

进程和线程之间的区别对于所有操作系统都是相当通用的。 一个进程通常代表一个独立的执行单元,具有自己的内存区域,系统资源和调度槽。

一个线程通常是进程内的一个“部门” – 线程通常共享相同的内存和操作系统资源,并共享分配给该进程的时间。 例如,当您打开浏览器和Microsoft Word时,每个都是一个不同的过程,但每个过程中发生的事情(如动画,刷新或备份)都可以是线程。

工作通常是由用户执行的长期工作单元。 这项工作可能由一个或多个过程“处理”。 它可能不是互动的。 例如,指示机器压缩大文件或在大型输入文件上运行一些处理脚本通常是一项工作。 命名是相对历史性的 – 大型机用于处理作业。 在UNIX系统中,许多作业是在预定的时间使用cron自动启动的,所以你有'cron作业'的概念。

所以,一个过程是一个单一的程序。 它至少有一个线程,也许更多。 每个线程占用一个调度程序槽,但是调度程序在分配CPU到线程方面有所不同; 在任何情况下,线程的重点都是让一个进程并行地完成多个任务。 线程共享各种系统资源,特别是内存,文件和套接字。

作业和任务是unix shell的概念; 作业是一个shell启动的进程,它仍在运行,暂停或在后台运行。 在bash手册中有一个很长的“工作控制”部分。 工作和任务大致相同的概念。