zoukankan      html  css  js  c++  java
  • 关于Linux前后台进程切换

    前言:

    当使用SSH远程登录服务器时,对于运行时间较长的程序(如Caffe的训练可能需要十几个小时),

    SSH可能会在很长时间后断掉,导致程序没运行完就中断了。

    为了解决这个问题,需要将在服务器运行的程序由“前台”转移到“后台”去。

    经过几番探索,最终发现screen方法TMUX方法是最成熟最好用的(没有之一,不接受反驳):

    相当于在远程服务器上开设了一个盒子,盒子里还是你的服务器。

    在盒子里运行的程序不会收到SSH连接中断的影响。

    随时连上服务器后只要进入盒子里,盒子的状态还和离开时一样,

    这也方便了开展工作


    TMUX方法:

    https://gist.github.com/ryerh/14b7c24dfd623ef8edc7

    对执行的命令后面加上&,直接放在后台执行

    如python main.py --image_size 96 --output_size 48 --dataset faces --is_crop True --is_train True --epoch 300 --input_fname_pattern *.jpg &

    用jobs可以查看当前正在运行的任务,

    jobs -l是查看所有正在运行的任务

    对于正在运行的程序,如果之前没有使用&,

    则首先ctrl+z将其暂停,然后

    bg %1可以把第一个任务放在后台运行

    使用fg %1则可以把后台的进程变成前台的

    以上都是在终端(XFTP)没有关闭过的前提下,

    如果关闭过了又打开,则jobs没有用了,因为jobs只能查看在当前命令行窗口后台运行的程序

    这时候可以使用ps命令查看所有运行的程序

    使用ps -ef | grep python

    查看正在运行的python程序

    会显示程序的编号

    如果想要关掉它

    使用kill -9 2363

    假设编号为2363,就可以关掉了

    nohup ./test.sh & 

    或者

    setsid ./test.sh & 

    然后输入exit,关闭终端,关闭XSHELL,再打开,使用ps -ef | grep python查看,还在

    就搞定了


    ==============================

    发现一个更高级的方法[2]:screen

    说几个实用的:

    screen -ls
    列出当前正在运行的会话

    screen -S bert
    创建一个独立会话,名字叫做Bert

    先按下Ctrl+a,然后输入w,列出所有已经创建的会话,其中*表示当前在哪个会话中

    先按下Ctrl+a,然后输入d,可以将当前会话挂起,这时候可以关闭xshell,关闭电脑,然而在那边还在正常运行着

    怎么回来呢?
    先用screen -ls,看到

    然后输入
    screen -r 36763.bert
    就能回去了
    如果想要干掉已经detached的会话[3] (session),需要输入
    screen -X -S 36763 quit

    然后就好了

    如果不小心关了电脑,但是screen会话还是attached的状态,这时候是进不去的,想关闭他的话,用下面的:
    screen -X -S 36763 kill
    就可以了



    Reference:
    1. http://blog.csdn.net/zxh2075/article/details/52932885
    2. http://www.cnblogs.com/mchina/archive/2013/01/30/2880680.html
    3. http://nanxiao.me/kill-detached-screen-session/
  • 相关阅读:
    【POJ
    【POJ
    【POJ
    【POJ
    【POJ
    【POJ
    【POJ
    【POJ
    NAT
    OSPF与ACL综合实验
  • 原文地址:https://www.cnblogs.com/QingHuan/p/6681631.html
Copyright © 2011-2022 走看看