详解nohup和& 区别


🧠 nohup& 的作用及区别详解

一、什么是 nohup

  • 含义nohup 是 “no hang up” 的缩写,意为“不挂断”。
  • 功能:运行指定命令时忽略所有 SIGHUP(挂断)信号,即使终端关闭或会话结束,进程依然继续执行。

二、什么是 &

  • 作用:将命令放入后台运行
  • 特点
    • 命令在后台执行,不影响当前终端的使用。
    • 进程仍然连接到当前终端,接收标准输入输出。

nohup& 的主要区别

特性nohup commandcommand &nohup command &
是否忽略 SIGHUP✅ 是❌ 否✅ 是
是否免疫 SIGINT (Ctrl+C)❌ 否✅ 是❌ 否
是否可接受标准输入❌ 关闭✅ 可以✅ 可以(取决于具体环境)
标准输出重定向✅ 默认重定向到 nohup.out❌ 输出仍在终端✅ 默认重定向到 nohup.out
是否适合长时间运行任务✅ 推荐❌ 不推荐✅ 强烈推荐

🔁 信号说明

信号触发方式默认行为nohup 是否免疫& 是否免疫
SIGINT (Ctrl+C)用户中断终止进程❌ 否✅ 是
SIGHUP (关闭终端/退出SSH)会话结束终止进程✅ 是❌ 否

📄 输入输出行为

1. nohup command

  • 标准输入:自动关闭
  • 标准输出 / 错误输出:
    • 自动重定向到当前目录下的 nohup.out
    • 如果无法写入当前目录,则尝试写入 $HOME/nohup.out
  • 示例:
    nohup ./my_script.sh
    

2. command &

  • 标准输入/输出仍绑定到当前终端
  • 如果关闭终端,进程会被终止(除非同时使用 nohup
  • 示例:
    ./my_script.sh &
    

3. nohup command &

  • 最常用组合,兼顾后台运行和防止挂断
  • 标准输入关闭,输出重定向到 nohup.out
  • 即使关闭终端、SSH连接,程序依然运行
  • 示例:
    nohup ./my_script.sh &
    

📌 实际应用建议

使用场景推荐命令说明
长时间运行任务(如服务、脚本)nohup command > output.log 2>&1 &安全可靠,避免被挂断,输出可记录
快速测试后台执行command &临时使用,关闭终端后进程消失
后台运行但需要交互nohup command &注意可能无法再输入,需提前重定向

🧩 示例对比

示例 1:仅使用 &

sh test.sh &
  • ✅ 在后台运行
  • ❌ 关闭终端后进程终止
  • ⚠️ 输出仍在当前终端窗口

示例 2:仅使用 nohup

nohup sh test.sh
  • ✅ 即使关闭终端也不会终止
  • ❌ 前台运行,占用当前终端
  • ✅ 输出重定向到 nohup.out

示例 3:结合使用(推荐)

nohup sh test.sh > mylog.log 2>&1 &
  • ✅ 在后台运行
  • ✅ 即使关闭终端也继续运行
  • ✅ 输出重定向到 mylog.log
  • ✅ 安全且适合生产环境

📝 总结一句话:

& 让程序在后台运行,nohup 让程序不因终端关闭而终止。两者结合使用(nohup ... &),是线上部署长时间任务的最佳实践。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不穿铠甲的穿山甲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值