背景

通过ssh远程登录Linux服务器时,需要让某个任务长时间在服务器上运行,但当用户关闭窗口或者网络断开时,终端会收到HUB(hangub)信号从而关闭其所有子进程。因此我们需要让服务器在关闭窗口的情况下能继续执行进程

进程管理

查看后台作业

jobs 参数:

​ -l: 除了列出作业号之外同时列出PID

​ -r: 列出仅在后台运行(run)的作业

​ -s:仅列出暂停的作业

bg %n #将编号为n的任务转后台运行

fg %n #将编号为n的任务转前台运行

Ctrl + Z #挂起当前任务

Ctrl + C #结束当前任务

ps:查看正在运行的进程信息
kill:杀掉某个进程

使用screen

通过该软件可以同时连接多个本地或远程的命令行会话,并在其间自由切换

这种方法的具体使用请看我之前发的screen的用法

使用nohub和&

nohub:隔离终端挂断信号
&:将当前命令以后台形式运行

直接在命令的最后加上 & 符号,即可让当前命令所执行的任务放到后台执行

⚠️使用这种方法,如果非正常退出当前shell终端时(如断网,直接关机,直接关闭shell软件等),任务同样会结束

因此通常将nohub和&放在一起使用,命令前加上nohub就可以让任务在你退出shell终端时忽略挂断信号,在退出shell终端后继续执行

输入nohup命令之后会给出提示:nohup: ignoring input and appending output to ‘nohup.out’

回车即可,意思是会把输出文件重定向到nohup.out中,当然你也可以自定义该输出文件,
例如

使用disown

Q.E.D.