在后台执行命令

把正在执行的任务放到后台执行
[root@localhost ~]# sleep 180s # 休眠180秒
^Z # 这里按下了“Ctrl+z”组合键,此时会把任务放到后台,但同时也会暂停执行
[1]+  已停止               sleep 180s # 方括号里面的数字是任务编号,状态为已停止
[root@localhost ~]# bg 1 # 在后台继续执行编号为1的任务
[1]+ sleep 180s &
[root@localhost ~]# bg 1 # 在任务完成前执行bg命令
-bash: bg: 任务 1 已在后台
[root@localhost ~]# bg 1 # 在任务完成后执行bg命令
-bash: bg: 任务已经终止
[1]+  完成                  sleep 180s
[root@localhost ~]#
 
 
 
直接把任务放到后台执行
[root@localhost ~]# sleep 5354s & # 休眠5354秒,命令最后的“&”表示把任务放到后台执行
[1] 2233 # 方括号里面的数字是任务编号
[root@localhost ~]# sleep 9527s & # 休眠9527秒,命令最后的“&”表示把任务放到后台执行
[2] 2236 # 方括号里面的数字是任务编号
[root@localhost ~]# sleep 1314s & # 休眠1314秒,命令最后的“&”表示把任务放到后台执行
[3] 2270 # 方括号里面的数字是任务编号
[root@localhost ~]# jobs -l # 查看后台任务
[1]   2233 运行中               sleep 5354s & # 方括号里面的数字是任务编号,状态为运行中
[2]-  2236 运行中               sleep 9527s & # 方括号里面的数字是任务编号,状态为运行中
[3]+  2270 运行中               sleep 1314s & # 方括号里面的数字是任务编号,状态为运行中
[root@localhost ~]# fg 2 # 把编号为2的后台任务恢复到前台
sleep 9527s
^C # 按下“Ctrl+c”组合键终止任务
[root@localhost ~]# jobs -l # 此时可以看到任务2已经不在任务列表里了
[1]-  2233 运行中               sleep 5354s &
[3]+  2270 运行中               sleep 1314s &
[root@localhost ~]#
 
 
 
需要注意的是如果断开SSH连接那么后台任务也会终止,要实现断开SSH连接后任务仍然能够在后台执行,可以nohup使用,具体可看下面的示例:
[root@localhost ~]# nohup sleep 1024s > /dev/null 2>&1 &
[1] 2492
[root@localhost ~]# jobs -l
[1]+  2492 运行中               nohup sleep 1024s > /dev/null 2>&1 &
[root@localhost ~]# 
说明:在命令的后面加上“> /dev/null 2>&1”可以屏蔽执行过程中的一切输出,如果要记录执行过程中的输出可以把/dev/null改为具体文件路径。
 
 
 
对于已完成的任务jobs命令会显示一次状态,然后将其移出任务列表
[root@localhost ~]# jobs -l
[1]+  2492 完成                  nohup sleep 1024s > /dev/null 2>&1
[root@localhost ~]# jobs -l # 可以看到再次查询时上面已完成的任务记录已经没有
[root@localhost ~]#

Copyright © 2024 码农人生. All Rights Reserved