disown 说明
bash
python BreakReminder.py & disown是一个典型的 Linux 后台守护式启动写法。我给你拆开讲清楚。
一、第一部分
bash
python BreakReminder.py &含义:
&→ 放到后台运行- shell 立即返回
- 任务仍然 属于当前 shell 会话
执行后你会看到类似:
[1] 12345[1]→ job 号12345→ 进程 PID
二、问题在哪里?
如果你现在:
- 关闭终端
- SSH 断开
- logout
会发生什么?
👉 默认情况下,这个后台任务会收到一个信号:
SIGHUP (hangup)然后被杀死。
三、disown 是干什么的?
bash
disown作用:
把刚才的后台任务,从当前 shell 的 job 控制中移除。
也就是说:
- 不再属于这个终端
- 终端关闭不会发送 SIGHUP
- 程序继续运行
四、完整理解这句话
bash
python BreakReminder.py & disown执行顺序是:
python BreakReminder.py &→ 放后台disown→ 把最近那个后台任务脱离 shell 管理
结果:
✅ 程序在后台运行 ✅ 关闭终端不会退出 ✅ 没有输出接管 ✅ 没有 job 管理
五、它和 nohup 的区别
方式 1
bash
nohup python BreakReminder.py &- 忽略 SIGHUP
- 输出默认写入
nohup.out
方式 2(你这个)
bash
python BreakReminder.py & disown- 不忽略 SIGHUP
- 而是从 shell 里脱离
- 更“干净”
六、推荐写法(更稳)
bash
python BreakReminder.py > /dev/null 2>&1 & disown解释:
| 部分 | 含义 |
|---|---|
> | 重定向标准输出 |
2>&1 | 错误输出合并到标准输出 |
/dev/null | 丢弃所有输出 |
这样:
- 没有日志污染
- 没有终端绑定
- 像一个小守护程序
七、如何确认还在运行?
bash
ps aux | grep BreakReminder或者:
bash
pgrep -fl BreakReminder八、总结
| 命令 | 终端关闭后是否存活 |
|---|---|
python xxx | ❌ 不会 |
python xxx & | ❌ 不会 |
python xxx & disown | ✅ 会 |
nohup python xxx & | ✅ 会 |
对于你的久坐提醒工具来说:
bash
python BreakReminder.py & disown已经是很合适的轻量后台运行方式了 👍