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

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


1. &(后台运行)

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

特点

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

示例

bash 复制代码
./long_running_script.sh &

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


2. nohup(忽略挂起信号)

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

特点

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

示例

bash 复制代码
nohup ./long_running_script.sh &

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


3. disown(取消作业控制)

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

特点

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

示例

bash 复制代码
./long_running_script.sh &
disown

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


区别对比

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

推荐用法

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

bash 复制代码
nohup ./long_running_script.sh > output.log 2>&1 &

解释

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

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


总结

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

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

相关推荐
2603_9664372617 小时前
格式化之后数据还能恢复吗?说清恢复条件
linux·运维·数据库
ZJU_统一阿萨姆17 小时前
【推理优化进阶】性能实验科学:工作负载、统计显著性与尾延迟归因
开发语言·人工智能·语言模型·系统架构·vllm
RisunJan18 小时前
Linux命令-traceroute(IP 路由路径追踪)
linux·运维·tcp/ip
Hhy_110718 小时前
《C++深度解构02》类和对象(上)——定义规范、内存对齐与 this 指针全解
c语言·开发语言·c++·学习·visual studio
电子云与长程纠缠18 小时前
UE5 Lyra PocketWorld进行3D内容UI预览 - 下
开发语言·学习·游戏·ui·ue5
拾光Ծ18 小时前
Linux五种I/O模型与fcntl非阻塞控制
java·linux·服务器·i/o模型
平常心的技术小牛18 小时前
Qt-快速上手-QLabel
开发语言·qt
XR12345678818 小时前
工厂办公楼无线网络:多楼层覆盖与访客体验怎么选?
开发语言·php
JL1518 小时前
Java并发编程面试全攻略-从synchronized到AQS底层原理
java·开发语言·面试·并发编程
云泽80818 小时前
Python 开发环境搭建全指南:从 Python 安装到 PyCharm 配置详解
开发语言·python·pycharm