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 命令` 进行确认。