linux后台运行进程的核心是脱离终端控制、避免sighup终止,并支持查看与管理;常用方法包括nohup+&(适合一次性任务)、screen/tmux(适合交互式持久会话)、systemd(适合系统级长期服务),以及jobs/disown/fg/bg(仅限当前shell作业)。

Linux 后台运行进程,核心在于让程序脱离终端控制、避免被 SIGHUP 终止,并能随时查看、控制或重启。常用方法有 nohup、&、screen、tmux 和 systemd service,适用场景各不相同。
用 nohup + & 快速启动简单后台任务
适合一次性、无需交互的短时任务(如日志采集、脚本轮询)。nohup 会忽略挂起信号,& 让进程在后台运行,输出默认重定向到 nohup.out。
- 基本写法:
nohup command > output.log 2>&1 & - 注意:必须加
&,否则仍占用当前 shell;2>&1表示把错误也合并进标准输出 - 退出终端后进程继续运行,可用
ps aux | grep command查看,用kill PID终止
用 screen 或 tmux 实现会话持久化
适合需要中途连接/断开、可能交互或长期运行的任务(如调试服务、远程部署)。它们创建独立会话,终端关闭不影响其中进程。
- 启动新会话:
screen -S myapp或tmux new -s myapp - 分离会话:
Ctrl+A, D(screen)或Ctrl+B, D(tmux) - 重新连接:
screen -r myapp或tmux attach -t myapp - 列出所有会话:
screen -ls或tmux ls
用 systemd 管理长期服务型进程
适合系统级守护进程(如 Web 服务、数据库、自定义 API),支持开机自启、自动重启、日志集成和依赖管理。
- 编写单元文件(如
/etc/systemd/system/myserver.service),包含[Service]段中设置Type=simple或Type=forking,并指定ExecStart= - 启用并启动:
sudo systemctl daemon-reload && sudo systemctl enable --now myserver - 查看状态:
systemctl status myserver;查看日志:journalctl -u myserver -f - 停止/重启:
systemctl stop myserver/systemctl restart myserver
补充:jobs、disown 和 fg/bg 的适用边界
这些命令只对当前 shell 启动的**前台作业**有效,无法跨终端或登录会话延续。
-
jobs查看当前 shell 的后台作业编号(如[1]+ Running ./script.sh &) -
disown %1可让作业脱离当前 shell 管理,防止终端关闭时被终止(但不保证完全后台化) -
fg %1或bg %1在当前会话内切换作业前后台,不能用于已关闭的终端