如何在 CentOS 中关闭终端而不终止 Python 程序

在 Linux 上,特别是在 CentOS 系统中,有时需要在关闭终端的情况下继续运行 Python 程序。默认情况下,当你关闭一个终端时,所有在该终端中运行的进程都会被终止。不过,有几种方法可以避免这种情况。

使用 nohup 命令

nohup 是一个可以将程序挂起(No Hang Up)以使其在注销终端后继续运行的命令。使用 nohup 命令运行 Python 程序的基本语法如下:

nohup python your_script.py &

在这个命令中:

  • nohup 防止程序接收到挂起信号。
  • your_script.py 是你的 Python 文件。
  • & 符号将程序放入后台运行。

运行后,程序的输出会被写入一个名为 nohup.out 的文件,你可以通过以下命令查看输出:

cat nohup.out

使用 screen 命令

screen 是一个终端多路复用器,允许你在一个终端窗口中管理多个会话。使用 screen 运行 Python 程序的步骤如下:

  1. 启动一个新的 screen 会话:

    screen
    
  2. 运行你的 Python 程序:

    python your_script.py
    
  3. 分离会话(即关闭 terminal),按下 Ctrl + A 然后按下 D

  4. 若要重新连接到会话,可以使用:

    screen -r
    

使用 tmux 命令

tmux 功能与 screen 类似,也是一种终端复用工具。其使用方式如下:

  1. 启动 tmux 会话:

    tmux
    
  2. 运行你的 Python 程序:

    python your_script.py
    
  3. 分离会话,使用 Ctrl + B 然后按下 D

  4. 重新连接会话:

    tmux attach-session -t 0
    

类图

通过下图展示了 Python 程序在不同工具下的执行方式的类图:

classDiagram
    class Terminal {
        +executeCommand()
    }
    class Nohup {
        +runProgram()
    }
    class Screen {
        +startSession()
        +detachSession()
        +reconnect()
    }
    class Tmux {
        +startSession()
        +detachSession()
        +reconnect()
    }
    
    Terminal <|-- Nohup
    Terminal <|-- Screen
    Terminal <|-- Tmux

甘特图

下面的甘特图展示了在不同工具中执行 Python 程序的时间线:

gantt
    title Python程序执行时间线
    dateFormat  YYYY-MM-DD
    section Nohup
    启动程序        :a1, 2023-10-01, 1h
    查看输出        :after a1  , 1h

    section Screen
    启动会话        :b1, 2023-10-02, 1h
    运行程序        :after b1  , 2h
    分离会话        :after b1  , 1h

    section Tmux
    启动会话        :c1, 2023-10-03, 1h
    运行程序        :after c1  , 2h
    分离会话        :after c1  , 1h

结论

在 CentOS 系统中关闭终端而不终止 Python 程序是一项非常有用的技能。通过 nohupscreentmux 这三种工具,可以实现这一目标。每种工具都有其独特的优点,你可以根据需求选择最适合你的那一个。希望这篇文章能够帮助你更好地管理你的 Python 程序,保持其在后台运行。