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:对已经在后台运行的任务提供额外的安全性,确保其不受终端控制。

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

相关推荐
阿珊和她的猫20 分钟前
autofit.js: 自动调整HTML元素大小的JavaScript库
开发语言·javascript·html
花小璇学linux23 分钟前
imx6ull-驱动开发篇22——Linux 时间管理和内核定时器
linux·运维·驱动开发
喜欢吃燃面40 分钟前
C++算法竞赛:位运算
开发语言·c++·学习·算法
草莓熊Lotso43 分钟前
《详解 C++ Date 类的设计与实现:从运算符重载到功能测试》
开发语言·c++·经验分享·笔记·其他
谱写秋天1 小时前
Qt 5.5 的安装与配置(使用 VSCode编辑)
开发语言·vscode·qt
项目申报小狂人1 小时前
算法应用上新!自适应更新策略差分进化算法求解球形多飞行器路径规划问题,附完整MATLAB代码
开发语言·算法·matlab
你好,赵志伟2 小时前
Socket 编程 TCP
linux·服务器·tcp/ip
Liang_GaRy3 小时前
心路历程-三个了解敲开linux的大门
linux·运维·服务器
阿珊和她的猫5 小时前
v-scale-scree: 根据屏幕尺寸缩放内容
开发语言·前端·javascript