如何让一个命令在后台运行并且退出终端不终止

2025-04发布16次浏览

如何让一个命令在后台运行并且退出终端不终止

在 Linux 或类 Unix 系统中,通常我们会在终端中运行一些命令或脚本。然而,当我们关闭终端时,这些命令可能会被终止。为了避免这种情况发生,我们可以使用一些工具和方法来确保命令在后台运行,并且即使关闭终端也不会终止。

方法一:使用 nohup 命令

nohup 是 "no hangup" 的缩写,它可以让程序忽略挂起(SIGHUP)信号,从而在终端关闭后继续运行。

实践步骤:
  1. 使用 nohup 启动命令。

    nohup your_command &
    
    • your_command 是你想要运行的命令。
    • & 表示将命令放入后台运行。
  2. 查看输出日志。 默认情况下,nohup 会将标准输出和标准错误重定向到 nohup.out 文件中。你可以通过以下命令查看日志:

    tail -f nohup.out
    
  3. 检查进程是否仍在运行。 使用 pspgrep 命令检查进程状态:

    ps aux | grep your_command
    
示例:
nohup python my_script.py &

上述命令将在后台运行 my_script.py 脚本,并将其输出保存到 nohup.out 文件中。


方法二:使用 screen 工具

screen 是一个终端复用工具,可以创建多个虚拟终端会话。即使关闭当前终端,screen 中的会话仍然保持活动状态。

实践步骤:
  1. 安装 screen(如果尚未安装)。

    sudo apt-get install screen  # Debian/Ubuntu
    sudo yum install screen      # CentOS/RHEL
    
  2. 创建一个新的 screen 会话。

    screen -S session_name
    
    • session_name 是你为会话命名的名字。
  3. screen 会话中运行你的命令。

    your_command
    
  4. 挂起 screen 会话。 按下 Ctrl+A 然后按 D 键,这将使会话脱离并返回到原始终端。

  5. 查看所有 screen 会话。

    screen -ls
    
  6. 重新连接到某个会话。

    screen -r session_name
    
示例:
screen -S my_python_session
python my_script.py
# 按 Ctrl+A 然后 D 挂起会话

方法三:使用 disown 命令

disown 是 Bash 内置命令,用于从当前 shell 的作业表中移除任务,从而使任务不受 SIGHUP 信号的影响。

实践步骤:
  1. 将命令放入后台运行。

    your_command &
    
  2. 使用 disown 移除任务。

    disown %1
    
    • %1 是任务编号,可以通过 jobs 命令查看。
  3. 关闭终端后,任务将继续运行。

示例:
python my_script.py &
disown %1

方法四:使用 tmux 工具

tmux 是另一个强大的终端复用工具,类似于 screen,但功能更强大。

实践步骤:
  1. 安装 tmux(如果尚未安装)。

    sudo apt-get install tmux  # Debian/Ubuntu
    sudo yum install tmux      # CentOS/RHEL
    
  2. 创建一个新的 tmux 会话。

    tmux new -s session_name
    
  3. tmux 会话中运行你的命令。

    your_command
    
  4. 挂起 tmux 会话。 按下 Ctrl+B 然后按 D 键,这将使会话脱离并返回到原始终端。

  5. 查看所有 tmux 会话。

    tmux ls
    
  6. 重新连接到某个会话。

    tmux attach -t session_name
    
示例:
tmux new -s my_python_session
python my_script.py
# 按 Ctrl+B 然后 D 挂起会话

总结

  • nohup:简单易用,适合短时间运行的任务。
  • screentmux:功能强大,适合长时间运行的任务,支持多窗口管理。
  • disown:适合已经在运行的后台任务。