让终端的任务/耗时任务在后台运行:我们在终端中打开耗时任务时,无法进行其他操作或者当网络端口时,任务未执行完毕就终止了。有什么办法令任务在后台运行呢?

涉及命令
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

参考:https://www.ibm.com/developerworks/cn/linux/l-cn-nohup/