xshell关闭终端后,程序仍然能够运行(tmux、screen、nohup)


由于网络不稳定,xshell连接服务器经常断网,经常出现程序跑到一半就被杀死了,又要重新再来,非常麻烦,而命令 nohup可以解决此问题

  • 正常命令
    root@09b183acf5c4:/home/# CUDA_VISIBLE_DEVICES=0,1 python main.py --epochs 500 --name 500epochs

  • 有三种方式
    方式一:tmux
    方式二:screen
    方式三:nohup

注意:方便起见,可切换到 root 管理员模式
切换方式

su

否则在命令前加

sudo

以下所有命令在 root 管理员模式下进行

方式一、tmux


tmux启动前缀命令preffix
默认是:ctrol +b
而我的是被设置成了:ctrol +a

下面统一称preffix

查看 tmux 的prefix

tmux show-options -g | grep prefix

重新设置 prefix

本次登录有效设置

将 prefix 设置为 Ctrl + x

tmux set -g prefix C-x
 
tmux unbind C-b 
 
tmux bind C-x send-prefix

通常情况下,使用 tmux set -g prefix C-x 就可以了

永久有效

第一次使用的话,是没有 tmux.conf ,因此打开是空的

vim ~/.tmux.conf 

一下的设置是 tmux 2.1 以前的,具体的设置方式查看相关版本号
输入

set -g prefix C-x
 
unbind C-b 
 
bind C-x send-prefix

使之生效

source ~/.tmux.conf

修改Tmux的Ctrl+B前缀快捷键_运维_lwgkzl的博客-CSDN博客
https://blog.csdn.net/lwgkzl/article/details/100799042

安装

apt-get install tmux

创建会话

会话名称是 session_name

tmux new -s session_name

后台运行

  • 方式一、快捷键
    进入该会话后
    一般是control +b (preffix),松开 preffix 组合键 ,然后再是按下按键d
    而我的这里是:先按下control +a (preffix),松开 preffix 组合键 ,然后再是按下按键d

  • 方式二、命令退出
    进入该会话后

tmux detach

重新进入会话

tmux a -t session_name 

查看会话中历史记录

查看会话中历史记录:先按ctrl+b(preffix),然后按Page Up ,Page Down

关闭会话的方法

  • 方式一
 tmux kill -session -t session_name
  • 方式二
    进入会话后
exit

一些常用的快捷键

preffix + b 实现与命令tmux attach等同功能,会话进行后台。
preffix + c 在tmux 的会话基础上,继续打开bash终端

参考文献

Xshell断开连接后仍保持服务器程序执行的方法(nohup,tmux) - weixin_41519463的博客 - CSDN博客
https://blog.csdn.net/weixin_41519463/article/details/89963166



Xshell和SecureCRT等SSH下使用Tmux及Byobu(解决Byobu被statusline信息面板 刷屏问题)
http://www.mamicode.com/info-detail-624881.html


【Linux】通过tmux让程序在xshell退出后保持运行 - ranmaxli的博客 - CSDN博客 https://blog.csdn.net/oqqHun123/article/details/79340982
<推荐>
Tmux使用手册 - 路易斯前端深度课 - SegmentFault 思否
https://segmentfault.com/a/1190000011488954

方式二:screen


  • screen 安装
pip  install screen   #安装screen
  • 创建会话(-m 强制)
    -d <作业名称>  将指定的screen作业离线。
    -m  即使目前已在作业中的screen作业,仍强制建立新的screen作业。
    -S <作业名称>  指定screen作业的名称。
screen -dmS session_name
# session_name session名称

root@09b183acf5c4:/home/xjr_directory/py/cifar/l1-norm-pruning-xjr# screen -dmS mysession-screen
  • 查看
screen -ls:列出当前所有虚拟终端

在这里插入图片描述

  • 进入该会话
screen -r session_name

这里的 session_name 可以是 screen 的名称,也可以是screen 的pid 线程号

root@09b183acf5c4:/home/xjr_directory/py/cifar/l1-norm-pruning-xjr# screen -r 3227

等价命令

root@09b183acf5c4:/home/xjr_directory/py/cifar/l1-norm-pruning-xjr# screen -r mysession-screen

在这里插入图片描述

  • 进入对应的screen运行程序
    运行程序跟我们平时在终端运行程序一样,没有任何不同

在这里插入图片描述

  • 退出当前会话,后台运行
    在screen窗口键入键盘按键 Ctrl +a + d 三个按键,Screen会给出detached提示

在这里插入图片描述

  • 再次进入该会话
screen -r session_name

这里的 session_name 可以是 screen 的名称,也可以是screen 的pid 线程号

root@09b183acf5c4:/home/xjr_directory/py/cifar/l1-norm-pruning-xjr# screen -r 3227

在这里插入图片描述
进入之后,会直接进入程序运行的状态

  • 结束该后台会话
screen -ls		# 查看
kill -9 3227      # 杀死进程
screen -r 3227   # 重新进入 ,因为已经杀死了,所以进不了了
screen -wipe      # 清楚已经关闭的screen

在这里插入图片描述
在这里插入图片描述

  • 注意事项
    有时候,非正常退出创建的 screen 终端,查看的时候,显示 Attached状态
    在这里插入图片描述
    这时候,需要使用命令
screen -D  -r <session-id>

screen -Dr 20656

-D -r 先踢掉前一用户,再登陆。

方式三:nohup


  • 使用nohup在后台运行
    格式
    nohup 命令 &

    root@09b183acf5c4:/home/# CUDA_VISIBLE_DEVICES=0,1 nohup python main.py --epochs 500 --name 500epochs &

  • 运行成功后,出现线程号

[1] 14844
  • 查看线程:
root@09b183acf5c4:/home/# ps
  PID TTY          TIME CMD
14443 pts/1    00:00:00 bash
14844 pts/1    00:03:53 python
15900 pts/1    00:00:10 python
15932 pts/1    00:00:00 ps

参考资料:

  • tmux
    Xshell断开连接后仍保持服务器程序执行的方法(nohup,tmux) - weixin_41519463的博客 - CSDN博客
    https://blog.csdn.net/weixin_41519463/article/details/89963166

  • screen
    让程序在关闭xshell后仍可以正常运行 - qq_43140843的博客 - CSDN博客
    https://blog.csdn.net/qq_43140843/article/details/89878892

xshell远程连接服务器,screen指令进行后台任务运行 - bobwpppppppp的博客 - CSDN博客
https://blog.csdn.net/bobwpppppppp/article/details/88045000

Linux中的screen命令使用 - han0373的博客 - CSDN博客
https://blog.csdn.net/han0373/article/details/81352663

linux screen 命令详解—让程序在后台运行 - 小C的博客 - CSDN博客
https://blog.csdn.net/C_chuxin/article/details/84328644

linux screen 命令详解—让程序在后台运行 - 小C的博客 - CSDN博客
https://blog.csdn.net/C_chuxin/article/details/84328644

Linux操作系统下Screen命令的简单使用方法 - lwm1986的专栏 - CSDN博客
https://blog.csdn.net/lwm1986/article/details/1725617

linux 技巧:使用 screen 管理你的远程会话 - weiyinchao88 - CSDN博客
https://blog.csdn.net/iteye_14514/article/details/81501189

Linux中的screen命令使用 - han0373的博客 - CSDN博客
https://blog.csdn.net/han0373/article/details/81352663

  • nohup
    Linux - nohup - 实现后台运行程序及查看(nohup与&) - 猿是怎么生活的? 一看便知 - CSDN博客
    https://blog.csdn.net/maihilton/article/details/82781897


    linux nohup和&后台运行,进程查看及终止 - ninisui的专栏 - CSDN博客
    https://blog.csdn.net/ninisui/article/details/77989938


    linux 中的 nohup 命令(设置后台进程): nohup: ignoring input and appending output to ‘nohup.out’ - 愿我如星君如月 … 夜夜流光相皎洁 … - CSDN博客
    https://blog.csdn.net/jiangyu1013/article/details/81476184


    xshell关闭后保持程序运行 - a_flying_fish的博客 - CSDN博客
    https://blog.csdn.net/qq_36290650/article/details/80758859


    xshell退出保持后台服务运行的方法 - zoulonglong的博客 - CSDN博客
    https://blog.csdn.net/zoulonglong/article/details/81484622

一些常见问题

  • screen 状态为Attached连上不的问题
    当你挂起screen,下次想连上screen的时候,有时候会出现screen session的状态为Attached而怎么连也连不上的情况。下面给出解决方法。

screen -ls
screen -D -r <session-id>

解释:
-D -r 先踢掉前一用户,再登陆。

解决screen状态为Attached连上不的问题 - Jason_Chen博客 - CSDN博客
https://blog.csdn.net/qq_41576459/article/details/85051678

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值