当前位置:首页>Linux>Linux脚本控制(二)——后台运行

Linux脚本控制(二)——后台运行

  • 2026-08-22 23:29:09
Linux脚本控制(二)——后台运行
通常在实际应用中,很多运行时间较长的脚本并不会直接在命令行运行,如果直接在终端运行将一直占用终端会话,并与终端会话的STDIN、STDOUT、STDERR关联,导致无法执行其它任何操作,因此常采用后台模式运行脚本。
01
后台运行脚本
以后台模式运行脚本方式为脚本名称后加&:
scriptname &
当后台进程运行时,会与当前shell分离开,并分配给后台进程一个作业号和PID(唯一的进程号),但它仍使用当前终端显示STDOUT和STDERR内容,为避免当前shell会话中命令的输出和后台进程的输出混在一起,最好是将后台脚本的STDOUT和STDERR进行重定向。
运行多个后台进程时,Linux系统都会为其分配新的作业号和PID。
在终端会话中使用后台进程时,如果终端会话退出,则后台进程也会随之退出,如果要实现退出终端会话的同时后台进程继续运行,则需采用nohup方式。
02
非控制台下运行脚本
通过nohup命令能阻断发给特定进程的SIGHUP信号,当退出终端会话时,可避免进程退出,使用方法如下:
nohup command
若需要该进程继续在后台保持运行,则使用如下方法:
nohup command &
此时,关闭终端会话,脚本会忽略其发送的SIGHUP信号并在后台保持运行。 由于nohup命令会解除终端与进程之间的关联,因此进程不再同STDOUT和STDERR绑定在一起,产生的STDOUT和STDERR内容会被自动重定向至nohup.out文件中(该文件一般在当前工作目录中创建,否则会在$HOME目录中创建)。
注:如果使用nohup运行了另一个命令,则该命令的输出会被追加到已有的nohup.out文件中(除非重定向脚本输出)
03
作业控制
作业控制包含启动、停止、杀死及恢复作业,通过不同的控制方式来控制进程的运行方式。
小拓展:脚本用$变量来显示Linux系统分配给该脚本的PID。
(1)查看作业
jobs命令——用于查看shell当前正在处理的作业
  • jobs -l ——可显示作业的PID及作业号
  • jobs -n ——只列出上次shell发出通知后状态发生改变的作业
  • jobs -p ——只列出作业的PID
  • jobs -r ——只列出运行中的作业
  • jobs -s ——只列出已停止的作业
显示结果中,带有+的作业为默认作业,如果作业控制命令没有指定作业号,则引用的就是该作业;带有-号的作业会在默认作业结束后成为下一个默认作业,任何时候,带有+和-的作业分别只能有一个。
(2)删除停止的作业
通过jobs -s查看作业的PID,后通过kill命令删除已停止的作业:
kill -9 PID
(3)重启已停止的作业
a. 以后台模式重启作业,采用bg
$1nbsp;bg        
若存在多个作业,则在bg后加作业号
b. 以前台模式重启作业,采用fg
$1nbsp;fg 2
以上示例中,2为作业号
注意:前台进程将会接管当前使用的终端,使用时需小心。

最新文章

随机文章