我们总是遇到需要在服务器上面长时间地运行程序,问题在于即使你后台运行程序,但是当你关闭终端或者网络波动时都会触发挂起(SIGHUP)信号,中断程序,非常地不方便。这里介绍两种方式来避免这样的问题出现,分别是nohup命令与screen工具。
nohup命令
nohup命令的使用方式非常直接:
nohup program inputfile > outputfile &
[1] 22
[1]+  Exit 2                  nohup R
注意:
- 成功使用nohup运行程序后不要直接关闭终端,而是采用exit命令退出,否则程序还是会断
- 
nohup成功运行下面显示的数字为PID,退出并重新回到终端时jobs命令已经失效,终止程序的话只能使用killPID。
- 可以通过$HOME/nohup.out文件追踪程序的输出与报错信息
screen
使用screen工具更加友好,类似的工具还有tmux。很多linux版本会预先安装screen工具,可以先查看一下版本(没有的话自行安装一下):
screen --version
Screen version 4.04.00 (GNU) 19-Jun-16
基础操作
- 命令行输入screen运行(可能会弹出用户协议,按enter或space键跳过)
- 运行想要执行的程序
- 通过快捷键ctrl+ad来分离session
- 使用screen -r回到最近的session
注意:
- 可以使用screen -S session_name创建一个命名的session
- 如果有多个session存在的话可以使用screen -ls来查看多个session,在-r参数后面加上session编号返回
screen -ls
There are screens on:
        4704.pts-15.c1  (Attached)
        7429.pts-18.c1  (Detached)
2 Sockets in /tmp/uscreens/S-yongwudao2019.
screen -r 4704
- 如果想要终止一个session,使用screen -r回到那个session,使用快捷键ctrl+ak,输入y确认
- 其它快捷键操作可以在screen session内通过快捷键ctrl+a?查看
参考
[1]. https://linuxize.com/post/how-to-use-linux-screen/
[2]. https://askubuntu.com/questions/356006/kill-a-screen-session










