如何让你的进程在linux 后台运行

前言

许多时候 需要在服务器端运行 一些耗时比较长的任务,但是 往往关闭 远程 ssh连接后 我们 的任务 也就随之结束了。 今天 我遇到了这个问题,差了一些资料,做一个笔记。

原因分析

为什么ssh关闭,会导致正在运行的程序死掉。通过查看相关的资料,发现真正的元凶是SIGHUP信号导致的。
当网络断开或终端窗口关闭后,也就是SSH断开以后,控制进程收到SIGHUP信号退出,会导致该会话期内其他进程退出.

nohup 命令

使用 该命令 可以忽略 hangup信号 从而达到 在后台运行的效果

命令介绍

1
nohup command > myout.file 2>&1 &

解释:myout.file 2>&1 的作用是将输出到屏幕的输出 重定向到 myout.file 中
最后一个 &的作用是 在后台运行

nohup 命令的详细介绍 可以看 该链接

screen 工具

nohup 还是有一些简陋, screen 是一个 多视窗管理的工具 通过这个工具 我们也可以实现 后台运行 并且 还可以实现 多视窗

命令 使用

  1. 创建新的screen
    1
    screen

这时候虽然看上去没有什么变化 但是 已经进入新的视窗 screen之中

  1. 在新的视窗中执行任务
    正常执行任务

  2. 脱离该视窗
    先后 按下 ctrl+A ctrl+D 脱离当前的视窗 此时任务在后台运行 即使关闭ssh 或者 前往其他视窗 进行 别的任务 对该作业 也不会 挂断

  3. 查看 所有视窗

1
screen -ls

此时 会显示所有的视窗 及其 id

  1. 恢复 视窗
    1
    screen -r [screen_id]

这时候 恢复了 视窗

  1. 关闭视窗
    1
    screen -X -S [screen_id] quit

通过上述命令 可以 关闭 一个 视窗
关于screen 的详细命令介绍 推荐一下资源

  1. 命令详情1
  2. 命令详情2
  3. IBM介绍
如果觉得有用的话,打赏我吧~