使用 MobaXertm 连接服务器后,想要在运行一个下载任务,使用&
挂在后台后,退出 MobaXterm,后台的任务也随之中断,于是搜到这个nohup
命令,可以完成我的需求。
nohup
意思是 No Hang Up,不要挂起的意思,即使退出终端也不会中断任务。
为了方便以后查阅,这里总结一下关于后台运行相关的命令。首先是最常用的&
符号。
& 后台运行
比如执行编译任务时通常会占用终端前台,这时候无法再执行其他命令,除非再开一个终端,对于有 GUI 界面时,再开一个终端很方便,但是如果是服务器就只能再想办法了。 &
可以将命令执行过程放在后台运行,如:
$ make > make.log 2>&1 &
[1] 16586
2>&1
是将标准出错重定向到标准输出,这里的标准输出已经重定向到了make.log
文件,即将标准出错也输出到make.log
文件中。最后一个&
,是让该命令在后台执行。 试想2>1
代表什么,2
与>
结合代表错误重定向,而1
则代表错误重定向到一个文件1
,而不代表标准输出;换成2>&1
,&
与1
结合就代表标准输出了,就变成错误重定向到标准输出。
在后台运行make
进行编译,并将输出结果(错误和正常输出)都保存到make.log
文件中,提交任务成功后,会显示进程 ID,编译的进程 ID 为 16586
。
有了进程 ID 我们可以监控,也可以中断进程:
# 查看进程状态
ps -ef | grep 16586
# 中断进程
kill -9 16586
但是使用 &
时关闭终端后,进程也会随之关闭。如果想要在后台持续运行程序,就需要nohup
命令。
nohup 使用
$ nohup make > make.log 2>&1 &
[1] 112233
命令功能同上,但是终端关闭,后台程序也会继续执行。
NOTE:终端关闭,是指带 GUI 的界面里终端,如果使用 SSH 等登陆,比如使用 MobaXterm,一个 session 相当于一个登陆账户,如果异常退出了这个账户,那么后台执行的程序也会中断。如果需要继续执行,需要正常退出账户,执行exit
命令。
汇总
fg # 将后台中的命令调至前台继续运行
bg # 将一个在后台暂停的命令,变成继续执行 (在后台执行)
jobs # 查看当前有多少在后台运行的命令
kill %num # 终止进程num
& # 加在命令后可以将其置于后台运行
ctrl + z # 置于后台,并且暂停不可执行
ctrl + c # 终止前台进程
ctrl + \ # 退出
ctrl + d # 结束当前输入(即用户不再给当前程序发出指令),那么Linux通常将结束当前程序