Linux / Unix:disown 命令示例
我是 Linux 和 Unix shell 的新用户。如何从当前 bash / ksh 或基于 POSIX 的 shell 中移除或删除作业?您能提供 disown 命令示例吗?
作业控制只不过是停止/暂停进程(命令)执行并根据您的要求继续/恢复其执行的能力。这是使用您的操作系统和 shell(例如 bash/ksh 或 POSIX shell)完成的。您需要使用bg command重新启动已停止的后台进程。该fg命令将当前 shell 环境中的后台作业移至前台。要删除/移除作业或告诉 shell 不要发送 HUP 信号,请使用disown命令。此命令是 bash 或 ksh93 shell 的一部分。此页面显示了 Linux 和 Unix 开发人员和用户的常用 disown 命令示例。
放弃命令详细信息 | |
---|---|
描述 | 从当前 shell 中删除作业 |
类别 | 流程管理 |
难度等级 | 简单的 |
Root 权限 | 不 |
操作系统兼容性 | BSD • Linux • macOS • Unix • WSL |
先决条件 | bash/ksh/zsh |
预计阅读时间 | 5 分钟 |
目的↑
从活动作业表中删除作业。
让我们看看如何在 Linux 和 Unix 中使用 disown 命令来删除作业或在从 ssh 和后台终端会话注销后保持它们运行。
语法↑
基本语法如下:
$ disown jobID
$ disown jobID1 jobID2 ... jobIDN
$ disown [options] jobID1 jobID2 ... jobIDN
- ksh shelldisown上的命令使shell 在登录 shell 终止时不向每个给定作业或所有活动作业(如果省略作业)发送 HUP 信号。
- bash shelldisown上的命令可以删除作业或者导致 shell 不向每个给定作业或所有作业发送 HUP 信号。
disown 命令示例↑
在开始使用 fg 命令之前,您需要在系统上启动几个作业以进行演示。键入以下命令来启动作业:
最后,也在前台运行ping 命令。例如:$ ing example.com
要暂停ping 命令作业,请按下按键序列。使用该命令列出当前作业(包括 jobID):
示例输出:
$ xeyes &
$ gnome-calculator &
$ gedit fetch-stock-prices.py &
Ctrl-Zjobs -l
$ jobs -l
[1]- 4581 Running xeyes & [2]+ 4584 Running ping example.com &
在哪里:
- [1] – 命令“xeyes”的进程号 (PID) 为 4581 的作业 ID
- [2] – 命令 'ping example.com' 的进程号 (PID) 为 4584 的作业 ID
在 Linux 和 Unix 中使用 disown 命令
如果没有任何选项,每个 jobID 都会从活动作业表中删除,即 bash shell 使用其当前作业的概念,该概念通过命令+中的符号显示jobs -l:
$ disown
示例输出:
图 01:disown 命令运行情况
如何删除所有作业?↑
将-a选项传递给 disown 命令,输入:
$ disown -a
Sample outputs:
bash: warning: deleting stopped job 4 with process group 58314
## You should not see any jobs running on the screen ##
$ jobs -l
Linux下disown命令示例
如何仅删除正在运行的作业?↑
将-r选项传递给 disown 命令,输入:
$ disown -r
$ jobs -l
如何在退出后台 shell 提示符后继续运行作业?↑
系统在控制终端或控制进程死亡时使用 SIGHUP(挂断)信号。您可以使用 SIGHUP 重新加载配置文件以及打开/关闭日志文件。换句话说,如果您从终端注销,所有正在运行的作业都将终止。为了避免这种情况,您可以将选项传递-h给 disown 命令。此选项标记每个作业 ID,以便如果 shell 收到 SIGHUP,则不会向作业发送 SIGHUP。语法为:
作业 ID 以 % 字符开头;%n 标识作业 n,而 %% 标识当前作业。
$ disown -h jobID
$ disown -h %2
Ubuntu/Debian 服务器的 disown 命令示例
在以下示例中,以 root 用户身份在后台使用apt-get 命令更新基于 Debian 或 Ubuntu Linux 的服务器:
## Step 1: Become a root user sudo -i ## Step 2: update system ## apt-get upgrade &> /root/system.update.log & ## Step 3: Mark apt-get so that SIGHUP is not sent when you exit and go for tea ## disown -h ## Step 4: exit from root shell ## exit
请注意,您也可以使用nohup 命令将Linux 或 Unix 上的任何命令的 SIGHUP 信号设置为忽略,以达到相同的目的。
disown 命令选项↑
选项 | 描述 |
---|---|
-a | 如果没有提供 jobID,则删除所有作业。 |
-h | 标记每个 jobID,以便当 shell 收到 SIGHUP 时,不会向该作业发送 SIGHUP 。 |
-r | 仅删除正在运行的作业。 |
相关媒体↑
本教程还提供简短视频格式:
总结↑
您已通过示例了解了如何使用 disown 命令从作业列表中删除作业,或者在关闭 Linux 或 Unix 终端窗口或 ssh 会话后仍让作业继续运行。使用 help 命令或 man 命令查看以下手册页:
$ man bash
$ man ksh
$ help disown