Shell 指令后台运行是指在Linux或Unix操作系统中执行一个Shell命令或脚本时,使其在后台模式下运行,即在不占用当前终端会话的交互性、不影响用户在该终端进行其他操作的情况下持续执行。这种执行方式允许用户在提交命令后立即返回到命令提示符,继续执行其他任务或关闭终端,而不会影响已放入后台的命令或脚本的执行状态。以下是后台运行Shell指令的主要特点和方法:
-
特点:与终端交互分离:
- 在后台运行的Shell指令不会打印其输出到当前终端,除非特意重定向。这使得用户可以在同一终端窗口中执行其他命令,而不被后台任务的输出干扰。
- 用户对终端的操作(如关闭、断开连接等)通常不会影响后台任务的运行。这意味着即使用户退出了登录会话,后台任务仍可能继续执行(除非受到系统的其他限制,如会话超时等)。
-
方法:使用
直接在命令末尾添加&
符号:&
:
command &//这是最简单的方法,将`command`提交到后台执行。
//系统会分配一个作业编号,并显示类似 `[1] 14318` 的信息,其中`[1]`是作业编号,`14318`是进程ID(PID)。
//的输出(标准输出和标准错误)默认会被重定向到一个名为`nohup.out`的文件,或者如果没有指定重定向,则可能发送到用户的邮件(如果系统配置支持)。
- 对于脚本文件:
sh script.sh &//类似地,要让一个Shell脚本在后台运行,只需在脚本文件名后面加上`&`符号即可。
//脚本会在后台启动一个新的子Shell来执行其内容。
作业控制:
-
查看后台作业: 使用
jobs
命令可以列出当前会话中所有后台作业的状态。 -
切换到前台: 使用
fg
命令可以将后台作业切换到前台继续执行。如果有多项作业,可以指定作业编号,如fg %1
,将编号为1的作业带到前台。 -
恢复后台运行: 使用
bg
命令可以将暂时停止(Stopped
状态)的作业恢复到后台运行。同样,可以指定作业编号,如bg %2
,恢复编号为2的作业。 -
停止后台作业: 可以使用
kill
命令结合作业的PID来终止后台作业。
- 其他工具辅助后台运行:
-
nohup
: 当使用nohup command &
时,命令将在后台运行,且不受挂断信号(SIGHUP)的影响,即使用户注销后也能继续执行。输出会被重定向到nohup.out
文件。 -
screen
或tmux
: 这些终端复用器提供了持久的会话环境,用户可以在其中启动后台任务,即使断开连接后,只要重新连接到同一个会话,就能看到任务仍在运行。 -
at
或batch
: 这些命令用于安排一次性任务在特定时间或当系统负载较低时在后台执行。
-
综上所述,Shell指令后台运行意味着该指令在不占用用户交互式终端会话的情况下被执行,用户可以继续在终端中进行其他操作,同时后台任务能够在一定程度上独立于用户的登录状态持续运行。通过使用&
符号、nohup
、screen
等工具,用户可以灵活地管理和监控这些后台任务。