Linux-让耗时任务在后台运行
让终端的任务/耗时任务在后台运行:我们在终端中打开耗时任务时,无法进行其他操作或者当网络端口时,任务未执行完毕就终止了。有什么办法令任务在后台运行呢?
涉及命令
ps -ef
查看进程
pstree
查看进程树
jobs
查看当前终端的任务列表
commands &
,命令后加&
代表将该命令放置后台运行
nohup commands &
setsid commands
(commands &)
效果同上面setsid
ctrl+z
(暂停/挂起当前 作业,在使用编辑器时特别有用,退出编辑器时,保存了光标所在的当前位置,下次进入编辑器时不用再次寻找上次光标所处位置)
bg %work_num如bg %1
(把作业从挂起转为继续运行)
disown -h %1work_num
使某个作业忽略HUP信号
disown -ah
所有作业忽略HUP信号
disown -rh
使正在运行的作业忽略HUP信号
screen -dmS session_name
建立一个断开模式的会话
screen -list
列出所有会话
screen -r session_name
重新连接指定会话
我们在终端中打开耗时任务时,无法进行其他操作或者当网络端口时,任务未执行完毕就终止了。有什么办法令任务在后台运行呢?
一、逐个添加
1.通过忽略hangup信号(此信号在终端关闭或者网络断开时就会发出),该种方式可通过jobs命令来查看作业列表
nohup ping www.google.com &
查看进程
ps -ef | grep www.google.com
2.通过把任务移为其他进程(非终端进程)的子进程来运行,这样就不会受到终端的HUP信号影响了,该种方式通过jobs命令是无法查看作业列表
setsid ping www.google.com
3.把任务放置到子shell(subshell)下运行,这样就不会受到终端的HUP信号影响了,该种方式通过jobs命令是无法查看作业列表,因为任务已经不属于该终端的作业了
(ping www.google.com &)
二、补救
如果我们执行了一个耗时任务,想在该耗时任务运行期间让它到后台运行,这时添加nohup或setsid已经迟了,怎么做?
disown
disown -h %1
三、一步完成
当有很多耗时任务,而我们又不想一个一个去加nohup ,setsid时,怎么办?
screen
screen -dmS session_name