文章目录
由于网络不稳定,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