Skip to content

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

执行顺序是:

  1. python BreakReminder.py & → 放后台
  2. 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

已经是很合适的轻量后台运行方式了 👍


Released under the MIT License.