disown命令用于将当前Shell启动的后台作业从作业列表中移除或标记,使其不受终端关闭影响而继续运行,核心是避免接收SIGHUP信号;支持按作业号、PID操作,含-a、-r、-h等选项。

直接用 disown 就能让已启动的后台进程“断连”终端,关掉 Shell 也不会被杀。它不改变进程本身,只修改 Shell 对它的管理方式——核心是绕过 SIGHUP 信号。
先确认进程已在后台运行
必须是当前 Shell 启动的作业才能用 disown。常见启动方式包括:
- 命令末尾加
&:比如python3 app.py & - 前台运行后按
Ctrl+Z暂停,再用bg放入后台
运行 jobs -l 查看作业列表,确认目标作业状态为 Running 或 Stopped,并记下作业号(如 %1)或 PID。
用 disown 移除作业关联
执行 disown 后,该作业就从当前 Shell 的作业表中消失,不再受终端生命周期影响:
- 移除单个作业:
disown %1(用作业号)或disown 12345(用 PID) - 移除所有作业:
disown -a - 只移除正在运行的作业:
disown -r
移除后再次运行 jobs,对应作业将不再显示。但用 ps 或 pgrep 仍能查到进程在运行,例如:ps -p 12345 或 pgrep -af app.py。
用 -h 标记代替移除(更安全的保留方式)
如果还想在 jobs 列表里看到它,只是不让它随终端退出而终止,用 -h 选项:
-
disown -h %1:作业仍显示在jobs中,但 Shell 退出时不发SIGHUP - 适合需要后续跟踪、但又怕误关终端中断任务的场景
注意:-h 不影响进程当前状态,也不阻止 Ctrl+C 或手动 kill,只防终端关闭导致的自动终止。
配合重定向避免日志丢失
disown 本身不管输出流向。若未重定向,标准输出和错误仍可能写入已关闭的终端,造成日志丢失或报错:
- 启动时就重定向:
python3 app.py > app.log 2>&1 & - 已启动但没重定向?无法补救输出流,但可确保进程存活;建议下次启动时加上
日志文件会持续写入,可用 tail -f app.log 实时查看。


















