Bash 中 nohup 与 & 的区别及用法详解

 更新时间:2025年01月22日 10:23:22   作者:vortex5  
在Bash中,`&`、`nohup`和`disown`各有用途:`&`用于后台运行命令,选择合适的工具可以实现后台任务的稳定运行,本文介绍Bash 中 nohup 与 & 的区别及用法,感兴趣的朋友一起看看吧

在 Bash 中,nohup& 都可以用来在后台运行命令,但它们的作用和用途各有不同。以下将详细介绍它们的特点、区别及适用场景。

1. &(后台运行)

& 是 Bash 的一个特殊符号,用于将命令放到后台执行。它的主要功能是让命令在后台运行,不会阻塞当前终端。

  • 特点: 后台执行:命令会在后台运行,用户可以继续在当前终端执行其他操作。
  • 依赖终端:尽管命令在后台运行,但它仍然依赖于当前终端。如果终端关闭(例如 SSH 连接断开),该后台进程可能会被终止。
  • 输出到终端:命令的标准输出和错误输出仍然发送到当前终端,可能导致屏幕混乱。

示例:

./long_running_script.sh &

上述命令会将脚本放到后台运行。但如果终端关闭(如断开 SSH 连接),脚本可能会被终止。

2. nohup(忽略挂起信号)

nohup 是一个命令,用于让进程忽略挂起信号(SIGHUP),从而确保进程在终端关闭后仍然能够继续运行。nohup 的名称来源于 “no hang up”(不挂起)。

  • 特点: 忽略挂起信号:即使终端关闭,进程也不会被终止。
  • 默认输出:如果未明确指定输出文件,nohup 会将标准输出和错误输出重定向到文件 nohup.out
  • 不一定后台运行:nohup 本身不会将命令放到后台运行,但可以与 & 结合使用实现后台运行。

示例:

nohup ./long_running_script.sh &

上述命令会确保脚本即使在终端关闭后也能继续运行,且输出默认会被重定向到 nohup.out 文件。

3. disown(取消作业控制)

disown 是一个用于从当前终端的作业控制中移除后台进程的命令。它通常与 & 配合使用,确保进程在终端关闭后继续运行。

特点:

  • 通过 disown,后台进程将不再受当前终端的控制。
  • 一旦移除,终端关闭对该进程不会产生影响。

示例:

./long_running_script.sh &
disown

上述命令先将脚本放到后台运行,然后通过 disown 将其从作业控制中移除,确保终端关闭后脚本继续运行。

区别对比

功能&nohupdisown
后台运行可结合 & 实现通常与 & 配合使用
是否依赖终端是(终端关闭会终止)否(忽略挂起信号)否(取消作业控制)
输出重定向否(默认输出到终端)默认重定向到 nohup.out(可更改)不影响输出
常用场景简单的后台任务长时间运行且需保持运行的任务已启动的后台任务需要保持运行

推荐用法

在实际场景中,如果希望命令在后台运行且在终端关闭后继续执行,可以结合使用以下命令:

nohup ./long_running_script.sh > output.log 2>&1 &

解释:

  • nohup:确保进程不会因终端关闭而被终止。
  • > output.log:将标准输出重定向到 output.log 文件。
  • 2>&1:将错误输出也重定向到相同的文件。
  • &:将命令放到后台运行。

通过上述组合,可以安全地运行后台任务,并将输出记录到指定文件中,便于后续分析。

总结

  • &:适合不依赖终端关闭的简单后台任务。
  • nohup:用于长时间运行的任务,避免受终端关闭影响。
  • disown:对已经在后台运行的任务提供额外的安全性,确保其不受终端控制。

选择适合的工具和组合方式,可以高效完成任务,同时保证系统的稳定性和可操作性。

到此这篇关于Bash 中 nohup 与 & 的区别及用法详解的文章就介绍到这了,更多相关Bash  nohup 与 & 区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • shell 字符串操作(长度,查找,替换)详解

    shell 字符串操作(长度,查找,替换)详解

    在做shell批处理程序时候,经常会涉及到字符串相关操作。有很多命令语句,如:awk,sed都可以做字符串各种操作。其实shell内置一系列操作符号,可以达到类似效果,大家知道,使用内部操作符会省略启动外部程序等时间,因此速度会非常的快
    2012-09-09
  • Shell脚本中让进程休眠的方法(sleep用法)

    Shell脚本中让进程休眠的方法(sleep用法)

    这篇文章主要介绍了Shell脚本中让进程休眠的方法,本文讲解的就是sleep的用法,可以实现睡觉若干秒、若干分钟、若干小时,需要的朋友可以参考下
    2014-11-11
  • 在 Shell 提示符中显示 Git 分支名称的方法

    在 Shell 提示符中显示 Git 分支名称的方法

    这篇文章主要介绍了在 Shell 提示符中显示 Git 分支名称的方法,本文详细的讲解了解决这个需求的过程,需要的朋友可以参考下
    2015-04-04
  • shell流程控制语句脚本编程解析

    shell流程控制语句脚本编程解析

    这篇文章主要为大家介绍了shell流程控制语句脚本编程解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • Shell iptales防火墙设置的方法步骤

    Shell iptales防火墙设置的方法步骤

    本文主要介绍了Shell iptales防火墙设置的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • Linux du命令实现根据文件或者文件夹大小排序输出

    Linux du命令实现根据文件或者文件夹大小排序输出

    Linux是一个强大的操作系统,广泛用于服务器和个人计算机,本文主要来和大家聊聊如何利用du命令实现根据文件或者文件夹大小排序输出,感兴趣的可以了解下
    2023-09-09
  • Shell 实现多任务并发的示例代码

    Shell 实现多任务并发的示例代码

    本文主要介绍了Shell 实现多任务并发的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • 使用Shell遍历目录及其子目录中的所有文件方法

    使用Shell遍历目录及其子目录中的所有文件方法

    今天小编就为大家分享一篇使用Shell遍历目录及其子目录中的所有文件方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • shell 进度条实现代码

    shell 进度条实现代码

    shell实现的一个进度条,感兴趣的朋友不妨看看
    2013-02-02
  • linux shell的输出效果修改方法(界面颜色)

    linux shell的输出效果修改方法(界面颜色)

    文本终端的颜色可以使用“ANSI非常规字符序列”来生成,有时候想个性化输出,就可以参考下面的方法
    2013-01-01

最新评论