让一个程序在后台运行

Part I: 如何让一个程序在后台运行,在关闭终端的时候,命令或者进行不会被中断

在 Linux 上,如果你希望一个命令在后台持续运行,即使你关闭终端,它不会被终止,有几种常用的方法可以实现这个目的:


方法一:使用 nohup

nohup(no hang up)命令可以让进程忽略挂起(HUP)信号,这样即使关闭终端也不会结束。

nohup your-command > output.log 2>&1 &
  • your-command 是你要运行的命令。
  • > output.log 将标准输出写入 output.log 文件。
  • 2>&1 表示将标准错误也重定向到标准输出。
  • & 表示在后台运行。

示例:

nohup python3 my_script.py > my_script.log 2>&1 &

方法二:使用 screen

screen 是一个虚拟终端,可以让你创建多个持久化会话。

screen -S mysession

然后运行你的命令,比如:

python3 my_script.py

按下 Ctrl + A,然后按 D 键就可以“分离”这个会话。

下次你可以用下面的命令重新连接:

screen -r mysession

方法三:使用 tmux

tmux 是另一个流行的终端复用工具,比 screen 更现代。

tmux new -s mysession

然后运行你的命令。退出会话同样可以用:

Ctrl + B 然后 D

重新连接:

tmux attach -t mysession

小贴士:查看后台运行的命令

可以用 jobs, ps, 或 pgrep 来查看:

jobs -l
ps aux | grep your-command

Part II: Screen与Tmux的区别:

screentmux 都是用于创建持久化终端会话的工具,意思是你可以启动一个会话、运行一些命令,然后“分离”这个会话(detach),即使你断开 SSH 或关闭终端,它们仍然运行。你可以稍后再“重新连接”(attach)回来继续。

下面是它们的主要区别选择建议👇


🥊 screen vs tmux:对比表

特性screentmux
发布年代1987年,老一代工具2009年,更现代
多窗口支持支持,但较基础更强大、灵活的窗口/面板管理
分屏功能有,但操作不便✅ 强大分屏、面板功能
配置和扩展性配置简单,扩展少可配置性高,插件支持丰富
状态栏美观简单粗糙✅ 支持丰富主题和状态栏插件
易用性更少快捷键,简单易上手起初快捷键复杂,习惯后更强大
默认安装✅ 通常预装在大多数 Linux 中需要手动安装(但也很容易)

🧠 如何选择?

✅ 选择 tmux,如果你:
  • 喜欢使用多个窗口/分屏同时操作多个任务。
  • 需要一个可配置、现代化的界面。
  • 想要使用插件(比如自动重连、主题、自定义快捷键等)。
  • 需要开发、调试工作更舒适的终端体验。
✅ 选择 screen,如果你:
  • 只是想快速挂个脚本后台跑,不在意界面和分屏。
  • 你的系统上已经预装了 screen,不想装其他工具。
  • 偶尔用一次,不想学习新快捷键。

🎮 快捷键对比示例
动作screen 快捷键tmux 快捷键
分离会话Ctrl + A 然后 DCtrl + B 然后 D
创建新窗口Ctrl + A 然后 CCtrl + B 然后 C
切换窗口Ctrl + A 然后 NCtrl + B 然后 N
分屏有但较麻烦Ctrl + B 然后 %"

🛠 安装(如未安装):
安装 tmux
sudo apt install tmux      # Debian/Ubuntu
sudo yum install tmux      # CentOS/RHEL
brew install tmux          # macOS

如果你是开发者或长期需要远程操作,强烈建议用 tmux

如果你只是偶尔远程执行脚本,screen 就足够了

Part III: tmux常用的命令

tmux 中,“挂起的窗口” 实际上是指你已经创建但当前没有 attach 的 session(也可以理解为“终端工作区”)。下面是查看和管理这些 session 和窗口的方法 👇


🧭 查看所有挂起的 tmux session

tmux ls

或者

tmux list-sessions

输出示例:

0: 1 windows (created Sun Apr 21 10:00:00 2024) [80x24]
1: 3 windows (created Sun Apr 21 11:00:00 2024) [80x24]

上面的例子说明你有两个 session,分别叫做 01,它们包含了不同数量的窗口(window)。


🔍 查看某个 session 中有哪些窗口

进入某个 session:

tmux attach -t 1

然后你可以使用快捷键查看窗口:

  • 列出所有窗口:看底部状态栏(每个窗口名字 + 编号)
  • 切换窗口:
    • Ctrl + B 然后 N(Next window)
    • Ctrl + B 然后 P(Previous window)
    • Ctrl + B 然后窗口编号(例如 1, 2

你也可以用命令行查看窗口信息(无需 attach):

tmux list-windows -t 1

示例输出:

0: bash* (1 panes) [80x24] 
1: vim (1 panes) [80x24] 
2: logs (1 panes) [80x24] 

🧼 查看所有 pane(分屏)信息

如果你想更详细地看到每个窗口下的分屏(pane):

tmux list-panes -t 1

📌 总结常用命令

目标命令
查看所有 tmux sessiontmux ls
查看某 session 的窗口tmux list-windows -t name
查看某窗口的所有 panetmux list-panes -t session:window
进入某 sessiontmux attach -t name

如果你有很多 session 还可以给它们起个名字,这样更容易管理:

tmux new -s myproject

然后用:

tmux attach -t myproject

Part IV: 如何理解tmux中的session和窗口的概念

理解 tmux 的核心概念是上手和用得溜的关键。tmux 主要有三个核心层级:Session(会话)Window(窗口)Pane(面板)。我们来用类比和例子解释一下:


🧠 简单理解:tmux 的“层级关系”

Session(会话)
 └── Window(窗口)
      └── Pane(面板)

💡 类比记忆法:tmux = 多层办公桌

🏢 Session = 办公桌

每个 Session 是一个独立的“工作环境”,你可以想象是你的一张桌子(或者一个“项目”)。你可以有多个 session 来分别处理不同任务(比如一个编程项目,一个日志查看项目等)。

📄 Window = 文件夹

在这张桌子上,你可以打开很多文件夹(每个文件夹里可以是一个 bash 窗口、vim 编辑器、python 脚本等)。这些就是 tmux 的“窗口”。

🔲 Pane = 拆页/分格

你可以把一个“窗口”拆成多个“格子”显示多个命令行视图,比如左边 tail 日志,右边 top 监控 CPU。


👀 实际例子

比如你启动了一个 session:

tmux new -s dev

你现在就在 dev 这个 session 里,默认会自动打开一个 window(编号为 0)。你可以在里面干一件事,比如运行服务器。

然后你可以按:

  • Ctrl + B 然后 C → 创建新窗口(相当于打开了另一个终端界面)
  • 每个窗口都有自己的编号,比如 0, 1, 2,你可以用 Ctrl + B 然后 01 来切换

在窗口里你还可以按:

  • Ctrl + B 然后 " → 水平分屏
  • Ctrl + B 然后 % → 垂直分屏

📋 命令和快捷键回顾

概念作用常用命令 / 快捷键
Session独立的工作空间tmux new -s name / tmux ls
Window每个 session 中的“标签页”Ctrl + B 然后 C / N / P
Pane每个 window 中的分屏Ctrl + B 然后 " / %

🧭 你可以这样组织你的 tmux:

Session: dev
 ├── Window 0: vim app.py
 ├── Window 1: python server.py
 └── Window 2: tail logs

Session: ops
 └── Window 0: top, htop, ping(多个 panes)

如果你经常做多任务操作,比如一边写代码一边看日志,tmux 简直是神器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值