前言
许多时候 需要在服务器端运行 一些耗时比较长的任务,但是 往往关闭 远程 ssh连接后 我们 的任务 也就随之结束了。 今天 我遇到了这个问题,差了一些资料,做一个笔记。
原因分析
为什么ssh关闭,会导致正在运行的程序死掉。通过查看相关的资料,发现真正的元凶是SIGHUP信号导致的。
当网络断开或终端窗口关闭后,也就是SSH断开以后,控制进程收到SIGHUP信号退出,会导致该会话期内其他进程退出.
nohup 命令
使用 该命令 可以忽略 hangup信号 从而达到 在后台运行的效果
命令介绍
1 | nohup command > myout.file 2>&1 & |
解释:myout.file 2>&1 的作用是将输出到屏幕的输出 重定向到 myout.file 中
最后一个 &的作用是 在后台运行
nohup 命令的详细介绍 可以看 该链接
screen 工具
nohup 还是有一些简陋, screen 是一个 多视窗管理的工具 通过这个工具 我们也可以实现 后台运行 并且 还可以实现 多视窗
命令 使用
- 创建新的screen
1
screen
这时候虽然看上去没有什么变化 但是 已经进入新的视窗 screen之中
在新的视窗中执行任务
正常执行任务脱离该视窗
先后 按下 ctrl+A ctrl+D 脱离当前的视窗 此时任务在后台运行 即使关闭ssh 或者 前往其他视窗 进行 别的任务 对该作业 也不会 挂断查看 所有视窗
1 | screen -ls |
此时 会显示所有的视窗 及其 id
- 恢复 视窗
1
screen -r [screen_id]
这时候 恢复了 视窗
- 关闭视窗
1
screen -X -S [screen_id] quit
通过上述命令 可以 关闭 一个 视窗
关于screen 的详细命令介绍 推荐一下资源