> 进程管理 > disown

disown: 放弃运行中作业的所有权 (当忘记使用 nohup 时)

将已在运行的作业从当前 Shell 的作业列表中移除,以保护该作业在终端关闭或注销时不会因收到 SIGHUP 信号而终止。通常用于不小心在没有 nohup 的情况下运行命令的场景。

disown 是什么?

像 Bash 这样的 Shell,在终端关闭时会向其管理的所有作业 (Job) 发送 '终止!' 信号 (SIGHUP)。`disown` 命令将某个特定的作业从 Shell 的管理列表 (族谱) 中清除,从而使其在 Shell 终止时不会随之关闭。

何时使用?

  • 忘记使用 nohup 时: 当运行一个耗时很久的作业,但需要下班且不能关闭该作业时使用。
  • 作业流程: 按 '暂停运行 (Ctrl+z)' -> '切换到后台 (bg)' -> '放弃所有权 (disown)' 的顺序使用。
  • Shell 内置命令: 这不是一个独立的程序,而是 Shell (Bash, Zsh 等) 的内置功能。

主要选项 (Shell)

不带选项使用时,默认作用于最近的作业。要指定特定作业,请使用 '作业编号 (Job ID)'。

1. 基本用法及目标指定

2. 状态保留

3. 帮助

生成的命令:

请尝试组合命令。

描述:

`disown` 执行命令。

通过组合这些选项,您可以与 AI 一起虚拟地执行命令。

使用场景示例 (必备模式)

disown 很少单独使用,通常与 `Ctrl+z`、`bg` 组合使用。

假设情况:忘记使用 nohup 运行了备份脚本!

不小心直接运行了 `backup.sh`,结果需要 1 小时才能完成。关闭终端会导致备份停止。这是拯救它的方法。

拯救三步曲 (Step-by-Step)

按照以下顺序输入键盘命令。

  • 1. 在运行中的终端中按下 `Ctrl + z` 暂停作业。
  • 2. 输入 `bg` 命令,使暂停的作业在后台继续运行。
  • 3. 输入 `disown` 命令,断开与 Shell 的连接。

选择特定作业进行分离

disown %2

仅分离通过 `jobs` 命令确认的第 2 号作业。

保留在列表但受保护 (-h)

disown -h %1

使其在执行 `jobs` 命令时可见,但即使关闭终端也不会被终止。

安装

disown 是 Bash、Zsh 等 Shell 内置 (Built-in) 命令,无需额外安装。

无需安装

如果您正在使用 Linux 终端,它已经安装了。

提示与注意事项

有用提示

  • Job ID vs PID: `disown` 使用的是 Shell 的作业编号 (Job ID,例如:%1),而不是进程 ID (PID,例如:1234)。请记住要加上 `%` 符号。
  • 无法查看输出: `nohup` 会生成 `nohup.out` 文件,但 `disown` 是将已运行的进程分离,其输出可能会丢失。如果需要保留输出,则需要使用 `gdb` 等工具,这会变得很复杂。
  • 确认方法: disown 后(如果不使用 -h 选项),作业将从 `jobs` 列表中消失。要查看进程是否仍在运行,需要使用 `ps -ef | grep 命令` 进行确认。

相关命令

功能上相似或经常一起使用的命令。



相同类别命令