Ubuntu/Linux 后台运行命令

编程教程 > Linux (5) 2025-08-06 09:39:35

1. 使用 & 让命令后台运行

在命令末尾加上 &,可以让命令在后台运行,并立即返回终端控制权:

command &

示例

python3 script.py &

特点

  • 命令会在后台运行,但输出仍然会打印到终端。
  • 如果终端关闭,该进程可能会被终止(除非使用 nohup 或 disown)。

2. 使用 nohup 防止进程被终止

nohup(no hang up)可以让命令在终端关闭后继续运行,并将输出重定向到 nohup.out

nohup command &

示例

nohup python3 script.py &

特点

  • 即使关闭终端,进程也不会终止。
  • 默认输出到 nohup.out,可以用 tail -f nohup.out 查看日志。

3. 使用 disown 让进程脱离终端

如果命令已经在运行(比如用 & 启动),可以把它从当前会话中分离:

# 先启动命令
command &
# 查看进程 ID(PID)
jobs -l
# 脱离终端(假设 PID 是 12345)
disown -h 12345

特点

  • 类似于 nohup,但适用于已经运行的进程。
  • 进程不会随终端关闭而终止。

 

4. 使用 screen 或 tmux 管理后台会话

screentmux 是终端复用工具,可以创建持久会话,即使断开 SSH 也能恢复:

使用 screen

# 安装 screen(如果未安装)
sudo apt install screen
# 创建新会话
screen -S mysession
# 在会话中运行命令
python3 script.py
# 按 `Ctrl + A`,再按 `D` 脱离会话
# 重新连接会话
screen -r mysession

使用 tmux

# 安装 tmux
sudo apt install tmux
# 创建新会话
tmux new -s mysession
# 运行命令
python3 script.py
# 按 `Ctrl + B`,再按 `D` 脱离会话
# 重新连接会话
tmux attach -t mysession

特点

  • 适合长时间运行的任务(如服务器程序)。
  • 可以随时恢复查看输出。

5. 使用 systemd 创建后台服务(适合长期运行)

如果希望命令像系统服务一样运行(开机自启、自动重启),可以创建 systemd 服务:

sudo nano /etc/systemd/system/my_service.service

写入以下内容:

[Unit]
Description=My Custom Service
[Service]
ExecStart=/usr/bin/python3 /path/to/script.py
WorkingDirectory=/path/to/
Restart=always
User=your_username
[Install]
WantedBy=multi-user.target

然后启用并启动服务:

sudo systemctl enable my_service
sudo systemctl start my_service

查看日志

journalctl -u my_service -f

总结

方法 适用场景 终端关闭后是否存活 日志管理
command & 临时后台任务 ❌ 可能被终止 输出到终端
nohup command & 长期运行,简单方式 ✔️ 存活 输出到 nohup.out
disown 已运行的进程脱离终端 ✔️ 存活 需手动重定向
screen/tmux 交互式后台任务 ✔️ 存活 可随时查看
systemd 系统级服务 ✔️ 存活 用 journalctl 查看

选择合适的方式取决于你的需求!


评论
User Image
提示:请评论与当前内容相关的回复,广告、推广或无关内容将被删除。

相关文章
1. 使用 & 让命令后台运行在命令末尾加上 &,可以让命令在后台运行,并立即返回终端控制权:command &示例:python3 script.py &特点
什么是alias (别名)命令别名就是为一条命令定义一个命令名,执行这个新的命令名就相当于执行这条命令。Linux 中“命令别名”涉及的命令为 alias 和
安装好dockerDocker 安装参考: 配置Docker是用普通用户以ubuntu用户来运行dockersudo chown ubuntu:ubuntu /
Linux 查看CPU实时运行频率执行命令:watch grep \'cpu MHz\' /proc/cpuinfo结果参考:由于是watch命令,所以在没推出前这个界面会动态刷新。ctrl+c 退出
Linux后台下载工具(器)transmission 类似迅雷使用详解,transmission 是一款支持绝大多数Linux系统的下载工具,采用web进行管理。可以通过web添加bt下载文件下...
概述本文主要讲述Linux系统中内存/硬盘测速方法,通过软件sysbench以及dd命令实现。sysbench安装Ubuntu/Debian:sudo apt-
Ubuntu系统或者Linux系统都应该保证软件更新到最新,以减少软件漏洞导致服务器风险。Ubuntu系统更新软件主要分两步。第一步:更新软件源信息该操作只会更新软件最新的信息到本地,不会下载和安装。
Ubuntu/Linux 上的额外依赖在 Ubuntu 或 Linux 上运行 Tess4J,你需要手动安装以下依赖:Tesseract OCR 引擎sudo
ubuntu 禁用/启用防火墙iptablesUbuntu查看防火墙状态命令sudo ufw status Status: activeactive  -  启用inactive - 停用Ub...
Ubuntu 可以通过 tzselect 命令来设定系统时区。这里我们目标是设定成中国时区也就是上海执行命令sudo tzselect先选亚洲,也就是 4 As
1.下载apache maven软件包 链接:Maven – Download Apache Maven下载命令 wget https://dlcdn.apac
Ubuntu 硬盘分区扩容命令进行磁盘操作时请务必备份数据!!!事情是这样的,服务器系统盘是块 120GB 的 SSD,当时装系统的时候只给了 50GB,还剩下
有时候服务器运行的好好的,突然就无法连接无法执行任何操作了,强制重启后需要通过系统日志排查系统故障的原因只有root特权程序才能正常关闭系统。因此,当系统以正常
Linux系统SSH命令基础用法,Linux,Linux系统