Linux中的作业和作业控制
简介
在Linux操作系统中,作业是指在后台或前台运行的进程。作业控制是指操纵这些进程的能力,包括挂起、恢复和终止它们。这对于管理多个任务或调试进程问题非常有用。
作业控制由shell实现,shell是一个命令行界面,允许用户与操作系统交互。Linux中最常用的shell是Bourne Again Shell (BASH),但其他shell,如Z Shell (ZSH)和Korn Shell (KSH)也可用。
在本文中,我们将探讨Linux作业控制的基础知识以及如何使用它来管理进程。
理解Linux中的进程和作业
在Linux中,每个正在运行的程序都被认为是一个进程。一个进程可以是一个独立的程序,也可以是更大程序的一部分。
每个进程都被分配一个唯一的标识符,称为进程ID (PID)。PID可以用来引用进程并对其执行操作,例如挂起或终止它。
作业是在前台或后台运行的进程。前台是终端中的活动窗口,后台是正在运行但未在终端中积极使用的任何进程。
默认情况下,当您在终端中运行命令时,它会在前台运行。您可以通过它显示输出以及在它完成之前您无法输入更多命令来判断进程是否在前台运行。
要在后台运行进程,可以在命令末尾使用&符号。
示例
$ sleep 30 & [1] 12345
在这个例子中,sleep命令使进程休眠30秒。&符号使进程在后台运行,输出[1] 12345表示它是作业号为1,PID为12345的作业。
使用fg和bg命令管理作业
fg(前台)和bg(后台)命令允许您在前景和后台之间移动作业。
要将后台作业调到前台,可以使用fg命令后跟作业号或PID。
示例
$ fg %1 sleep 30
这将把作业号为1的sleep命令调到前台并显示其输出。
要将前台作业发送到后台,可以使用bg命令后跟作业号或PID。
示例
$ sleep 30 [1] 12345 ^Z [1]+ Stopped sleep 30 $ bg %1 [1]+ sleep 30 &
在这个例子中,sleep命令在前台运行,然后使用^Z键盘快捷键挂起。然后使用bg命令在后台恢复作业。
挂起或恢复Linux中的作业
suspend命令允许您暂时停止作业,而kill命令允许您永久终止作业。
要挂起作业,可以使用suspend命令后跟作业号或PID。
示例
$ sleep 30 & [1] 12345 $ suspend %1 [1]+ Suspended
这将挂起作业号为1的sleep命令。然后可以使用fg命令恢复作业,或将其保留在后台挂起状态。
要终止作业,可以使用kill命令后跟作业号或PID。
示例
$ sleep 30 & [1] 12345 $ kill %1
这将终止作业号为1的sleep命令。
使用jobs和ps命令查看和管理作业
jobs命令允许您查看当前shell中所有在后台运行或挂起的作业的列表。ps命令允许您查看系统上所有正在运行的进程的列表。
示例
$ sleep 30 & [1] 12345 $ sleep 60 & [2] 12346 $ jobs [1] Running sleep 30 & [2] Running sleep 60 &
您可以使用jobs命令查看每个作业的状态及其作业号或PID。
ps命令允许您查看系统上当前正在运行的所有进程的列表。您可以使用-a标志显示所有进程,使用-x标志显示与终端无关的进程。
示例
$ ps -ax PID TTY STAT TIME COMMAND 1 ? Ss 0:00 /sbin/init 2 ? S 0:00 [kthreadd] 3 ? S 0:00 [ksoftirqd/0] 4 ? S 0:00 [kworker/0:0] ...
ps命令显示每个进程的PID、终端(TTY)、状态、时间和命令。
结论
在Linux中,作业控制允许您管理系统上正在运行的进程。您可以使用fg、bg、suspend和kill等命令来操作作业,并使用jobs和ps命令来查看和管理它们。理解和使用这些命令可以帮助您有效地管理系统和排除问题。