第一板斧:& 符号(直接后台运行)
在命令末尾添加 &,将进程放入后台运行:
python app.py &
特点:
立即返回终端控制权
输出仍会显示在当前终端
关闭终端或退出登录可能导致进程终止(除非配合 nohup)
查看后台任务:
jobs -l
将后台任务调回前台:
fg %任务号
第二板斧:nohup(脱离终端运行)
使用 nohup 使进程忽略挂断信号,搭配 & 实现完全后台运行:
nohup python app.py > output.log 2>&1 &
参数解释:
nohup:忽略挂断信号(SIGHUP)
> output.log:将标准输出重定向到文件
2>&1:将标准错误合并到标准输出
&:放入后台运行
查看进程:
ps aux | grep app.py
终止进程:
pkill -f app.py # 或 kill PID
**第三板斧:screen / tmux(终端复用器)
创建虚拟终端会话,即使断开 SSH 连接进程仍继续运行:
screen 用法:
screen -S session_name # 创建新会话
python app.py # 在会话中运行程序
Ctrl + A, D # 分离会话(程序在后台运行)
screen -ls# 查看所有会话
screen -r session_name # 恢复会话
tmux 用法(更现代):
tmux new -s session_name # 创建会话
python app.py # 运行程序
Ctrl + B, D # 分离会话
tmux ls# 查看会话
tmux attach -t session_name # 恢复会话
进阶选择:systemd(生产环境推荐)
对于需要持续运行的服务,建议使用 systemd 管理:
sudovim /etc/systemd/system/myapp.service
配置文件示例:
[Unit]
Description=My Application
[Service]
Type=simple
User=www-data
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/python app.py
Restart=always # 崩溃时自动重启
[Install]
WantedBy=multi-user.target
常用命令:
sudo systemctl start myapp # 启动
sudo systemctl status myapp # 查看状态
sudo systemctl enable myapp # 设置开机自启
场景选择指南
临时测试:使用 & 或 nohup
交互式长任务:使用 screen/tmux
生产环境服务:使用 systemd 或 supervisor
容器环境:使用 Docker 等容器编排工具
注意事项