在Linux操作系统中,disown
命令是一个用于管理后台任务的重要工具,它允许用户将指定的作业从当前Shell的作业列表中移除,从而确保这些作业在Shell退出时不会受到影响,本文将详细介绍disown
命令的用法和相关示例。
`disown`命令的基本用法
disown
命令的基本语法如下:
disown [-h] [-ar] [jobspec ... | pid ...]
-h
: 标记每个作业标识符,使这些作业在Shell接收到SIGHUP信号时不会收到SIGHUP信号。
-a
: 移除所有的作业。
-r
: 移除运行中的作业。
jobspec
: 要移除的作业标识符,可以指定一个或多个。
pid
: 要移除的作业对应的进程ID,也可以指定一个或多个。
使用示例
1. 列出当前Shell中的作业
在介绍具体操作之前,我们先通过jobs
命令查看当前Shell中的作业,假设有以下输出:
$ jobs -l [1]28756 Stopped ssh 192.168.1.4 [2]+ 28833 Stopped ssh 192.168.1.7 [3] 28986 Running sleep 120 &
2. 移除运行中的作业
使用disown -r
命令可以移除所有正在运行的作业。
$ disown -r $ jobs -l [1]28756 Stopped ssh 192.168.1.4 [2]+ 28833 Stopped ssh 192.168.1.7
可以看到,运行中的作业已被移除。
3. 移除指定的作业
使用disown %jobspec
可以移除特定的作业,要移除作业2:
$ disown %2 $ jobs -l [1]28756 Stopped ssh 192.168.1.4
作业2已被成功移除。
4. 移除所有作业
使用disown -a
命令可以移除所有作业:
$ disown -a $ jobs -l
所有作业都被移除了。
5. 使用-h
选项标记作业
-h
选项可以标记作业,使其在Shell接收到SIGHUP信号时不会收到SIGHUP信号。
$ sleep 90 & [1] 109080 $ jobs -l [1]+ 109080 Running sleep 90 & $ disown -h %1 $ exit
在新终端中查找该作业:
$ pgrep -a -u user2 -f 'sleep 90' 109080 sleep 90
可以看到,即使Shell已退出,作业仍在运行。
常见问题与解答(FAQs)
Q1:disown
命令与kill
命令有何区别?
A1:disown
命令仅用于将作业从当前Shell的作业列表中移除,并不影响作业的实际运行状态,而kill
命令则用于向进程发送信号,可能导致进程终止。disown
关注的是Shell对作业的管理,而kill
关注的是进程的生命周期。
Q2: 如何确保后台任务在退出Shell后继续运行?
A2: 可以使用nohup
命令结合&
符号来启动后台任务。
$ nohup sleep 120 &
这样,即使在退出Shell后,任务也会继续运行,也可以使用disown -h
命令标记作业,使其在Shell接收到SIGHUP信号时不会收到SIGHUP信号。
小编有话说
通过本文的介绍,相信大家对Linux系统中的disown
命令有了更深入的了解,这个命令虽然简单,但在实际操作中却非常实用,特别是在需要长时间运行后台任务的情况下,合理使用disown
命令,可以有效避免因Shell退出而导致的任务中断问题,希望本文能为大家在日常工作中提供帮助。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1490044.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复