Linux后台运行程序最实用的两种方式

Linux如何在后台跑程序刚接触Linux的同学都会遇到的问题。大家使用Linux操作系统时,或许都遇到过以下类似场景。

  • 场景1:我用xshell通过 telnet/ssh 远程登录服务器,跑脚本或执行一些耗时较长的任务,有时会因为 络不稳定或手贱等原因断开我的控制终端(如:xshell、sourceCRT)的远程连接状态,导致花费大量时间执行的程序又要重新跑;真难受!

  • 场景2:我需要长时间稳定的跑脚本,希望能在Linux后台跑,关掉xshell也没事,且随时可以回来看输出信息或操作。

目录

  • 应对手段
  • 方式一:nohup 命令 &
  • 方式二:screen
    • 1、如何使用screen
    • 2、screen 工具需安装
    • 3、screen 后台运行原理
  • 附、一张有故事的照片(十三)

应对手段

我们知道,当用户注销(logout)或者 络断开时,终端会收到 HUP(hangup)信 从而关闭其所有子进程(包括sshd及其子进程)。

因此,我们的解决办法就有两种途径(对应以下两种方式):

  • 让进程忽略 HUP 信 ,
  • 让进程运行在新的会话里从而成为不属于此终端的子进程。

方式一:nohup 命令 &

nohup 是我们最常用的办法。顾名思义,nohup 就是让提交的命令忽略 hangup 信 。从而当ssh连接状态断开时,不会被系统中断掉。nohup 在使用上十分方便,只需在要处理的命令前加上 nohup 即可,标准输出和标准错误缺省会被重定向到 nohup.out 文件中。一般我们可在结尾加上 表示将命令放入后台运行。

比如我们测试在后台执行 命令,如下即可:

方式二:screen

我们认为Screen是目前最实用的Linux后台运行工具之一。简单的说,screen 提供了 ANSI/VT100 的终端模拟器,使它能够在一个真实终端下运行多个全屏的伪终端,每个伪终端我们称之为一个session。

相当于我们可以用xshell打开多个连接(session),不用时可以将这些连接置为,,并随时可以恢复继续使用,恢复使用时为在线状态,说明有人正在使用。

1、如何使用screen

3、通过退出当前session,使其后台(离线)运行

5、通过 或登录离线session

6、杀掉“chh”这个session

2、screen 工具需安装

  • 如果你使用yum软件包管理工具:yum install screen
  • 如果你使用APT软件包管理工具:apt-get install screen

另:手动下载地址:http://ftp.gnu.org/gnu/screen/

3、screen 后台运行原理

我们可以通过查看进程树来理解screen是如何不受ssh断开影响的。

  • 这是不用screen的普通运行方式及进程树

我们可以看出,未使用 screen 时我们所处的 bash 是 sshd 的子进程,当 ssh 断开连接时,HUP 信 自然会影响到它下面的所有子进程(包括我们新建立的 ping 进程),杀掉所有子进程。

  • 再看看使用 screen 运行进程的进程树

如图可见,bash 是 screen 的子进程,而 screen 是 init(PID为1)的子进程。那么当 ssh 断开连接时,HUP 信 自然不会影响到 screen 下面的子进程了。

附、一张有故事的照片(十三)

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年11月13日
下一篇 2020年11月13日

相关推荐