远程连接Linux,如何使程序断开连接后继续运行

摘要:远程连接到Linux终端后,如果发生意外或者人为断开了远程连接,那么正在运行的程序或命令(例如备份数据库这种比较耗时的操作)就会中断。原因是因为断开连接后,终端会收到SIGHUP(hang-up挂断)信号从而关闭该会话期的子进程。解决方法1.nohup命令nohup命令的功能就和它的名字一样,nohup,忽略hup信号,不挂断进程,进程仍然属于当前会话(终端关闭后,进程会变成孤儿进程,PPID变成1)。例如:(不加&;命令不会在后台执行)[root@localhost

  • 远程连接到Linux终端后,如果发生意外或者人为断开了远程连接,那么正在运行的程序或命令(例如备份数据库这种比较耗时的操作)就会中断。原因是因为断开连接后,终端会收到SIGHUP(hang-up 挂断)信号从而关闭该会话期的子进程。

    解决方法

    1. nohup 命令

    nohup命令的功能就和它的名字一样,no hup,忽略hup信号,不挂断进程,进程仍然属于当前会话(终端关闭后,进程会变成孤儿进程,PPID变成1)。
    例如:(不加&; 命令不会在后台执行)

    [root@localhost ~]# nohup ping 127.0.0.1 &;[1] 27641nohup: 忽略输入并把输出追加到"nohup.out"

    nohup会将ping命令的默认输出从屏幕重定向到当前目录的nohup.out文件,如果当前目录不可写,会重定向到 $HOME/nohup.out 。
    如果ping命令已经重定向输出了,就不会重定向到nohup.out了,例如nohup ping 127.0.0.1>/dev/null &;

    2. screen 命令

    如果程序需要交互等复杂的操作,推荐使用功能强大的screen。screen 提供了 ANSI/VT100 的终端模拟器,使它能够在一个真实终端下运行多个全屏的伪终端。
    不是所有Linux都自带screen。查询安装包信息:rpm -qa|grep screen
    安装方法:

    • CentOS系统:yum install screen
    • Debian 系统:apt-get install screen

    用法:

    • 打开新的会话窗口:screen
    • 结束当前会话:exit
    • 在新会话中执行程序(程序关闭时会话自动结束):screen vi test.c
    • 打开新会话并起个名字:screen -S myname
    • 暂时离开会话(经常用):Ctrl+a 然后 d
    • 查看会话列表: screen -ls
    • 恢复之前离开的会话:screen -r 会话名或进程号
    • 清除dead状态的会话:screen -wipe
    • 启动一个开始就是Detached状态的会话:screen -dmS 名字 命令
    常用快捷键功能
    Ctrl+a ?显示所有键绑定信息
    Ctrl+a d暂时离开会话返回之前的shell(会话进入Detached状态)
    Ctrl+a w显示所有窗口列表(不包括Detached状态的)
    Ctrl+a Ctrl+a切换到之前显示的窗口(不切换Detached状态的)
    Ctrl+a c创建一个新的运行shell的窗口并切换到该窗口
    Ctrl+a n切换到下一个窗口
    Ctrl+a p切换到上一个窗口
    Ctrl+a 0..9切换到窗口0..9
    Ctrl+a k杀掉当前窗口(会提示确认)

    参考:
    http://www.path8.net/tn/archives/3746
    http://blog.csdn.net/v1v1wang/article/details/6855552

    进程操作相关的命令

    1. &;

    举例:ping 127.0.0.1 >/dev/null 2>&;1 &;
    后台运行ping命令(终端不显示输出结果和错误信息),关闭终端会终止命令。

    2. Ctrl+C、 Ctrl+Z

    Ctrl+C 终止当前命令
    Ctrl+Z 挂起当前命令到后台,命令会暂停执行

    [ aliyunzixun@xxx.com ~]# ping 127.0.0.1>/dev/null^Z[1]+ Stopped ping 127.0.0.1 > /dev/null

    3. jobs、 fg、 bg

    jobs 显示当前会话运行的后台任务
    语法:jobs [-lnprs] [jobspec ...] or jobs -x command [args]
    参数:

    • -l 比默认多显示进程id(PID),+表示当前任务,-表示非当前,任务有4种状态:running、stopped、done(正常完成)、Terminated(中止,比如通过kill命令杀死)
    • -p 仅显示进程号
    • -n 显示任务状态的变化 (然而我没有试出效果)
    • -r 仅显示运行状态(running)的任务;
    • -s 仅显示停止状态(stoped)的任务。r s两个参数一起用只有放在后面的会起作用。
    • jobspec 表示任务号或唯一的任务名,可以多个。
    [root@localhost ~]# jobs[1]- Running ping 127.0.0.1 > /dev/null &;[2]+ Stopped vi[root@localhost ~]# jobs -l[1]- 21777 Running ping 127.0.0.1 > /dev/null &;[2]+ 21778 停止 (tty 输出) vi

    fg 将后台任务放到前台(Foreground)
    语法:fg [job_spec] 不加参数表示操作当前任务
    bf 使挂起的任务在后台运行(Background )
    语法:bg [job_spec ...] 不加参数表示操作当前任务

    [root@localhost ~]# ping 127.0.0.1>/dev/null^Z[1]+ Stopped ping 127.0.0.1 > /dev/null[root@localhost ~]# bg 1[1]+ ping 127.0.0.1 > /dev/null &;[root@localhost ~]# jobs[1]+ Running ping 127.0.0.1 > /dev/null &;[root@localhost ~]# fgping 127.0.0.1 > /dev/null^C

    4. ps、 pstree

    ps 查看系统进程
    默认值显示当前会话的进程:

    [root@localhost ~]# ps PID TTY TIME CMD27850 pts/2 00:00:00 bash28304 pts/2 00:00:00 ps

    ps -ef 完整格式显示所有进程。PID是进程号,PPID是父进程号
    可以用管道符 | 联合grep过滤输出:

    [root@localhost ~]# ps -ef|grep SCREENroot 28364 27850 0 18:03 pts/2 00:00:00 grep SCREENroot 28825 1 0 Oct09 ? 00:00:00 SCREEN -S mym

    pstree 显示进程树

    • pstree 显示完整进程树,根节点为init
    • pstree 进程ID 以指定进程为根显示进程树
    • pstree -h 特别标明现在执行的程序。
    • pstree -H进程ID 但特别标明指定的程序
    • pstree -a 显示每个程序的完整指令,包含路径,参数或是常驻服务的标示

    5. kill、 pkill

    kill 发送信号给系统,让系统将指定进程结束

    • kill -l 显示信号列表,常用的有2个,SIGTERM 代号15(默认信号),SIGKILL 代号 9
    • kill 进程ID 发送SIGTERM,程序可以花一段时间正常关闭自己,该信号可以被忽略。
    • kill -15 %jobspec 正常结束任务
    • kill -9 进程ID 发送SIGKILL ,强制结束程序,未保存的进度将会丢失,程序不能忽略此信号。
    • kill -9 %jobspec 强制结束任务

    pkill 通过命令名字结束进程,可以使用正则。信号值和kill一样

    • pkill -9 fire 请求强制结束所有名字中有fire的进程
      为了避免匹配错,可以先使用pgrep -l fire或者ps -ef|grep fire查询一下
    • pkill -u 用户列表 正常结束指定用户下的所有进程
    • pkill -P PPID列表 正常结束指定父进程下的所有进程
  • 以上是远程连接Linux,如何使程序断开连接后继续运行的内容,更多 连接 断开 远程 运行 继续 程序 如何 Linux 的内容,请您使用右上方搜索功能获取相关信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值