当前位置: 首页 > article >正文

nohup与

在 Unix/Linux 系统中,nohup 命令和 & 符号都是用来在后台运行命令的工具,但它们有一些区别。

nohup

nohup 命令允许你在终端关闭之后继续运行进程。通常情况下,当你退出终端会话时,正在运行的进程会被挂断(SIGHUP 信号)。nohup 命令则会忽略 SIGHUP 信号,使得进程即使在终端关闭后也能继续运行。

& 符号

& 符号用来将命令放入后台运行。当你在命令后面加上 &,shell 会立即将该命令放入后台执行,并立即返回命令提示符,允许你执行其他命令。

区别

  1. 忽略 SIGHUP:
    nohup 命令会忽略 SIGHUP 信号,这意味着即使你在终端会话结束后,进程仍然可以继续运行。而使用 & 符号的命令不会忽略 SIGHUP 信号,除非你在 .bashrc 或其他 shell 配置文件中设置了忽略 SIGHUP 信号。

  2. 输出重定向:
    nohup 命令会自动将标准输出和标准错误输出重定向到一个名为 nohup.out 的文件中(除非你指定了其他文件)。而使用 & 符号的命令默认不会这样做,标准输出和标准错误输出仍然会被发送到终端。

使用示例

使用 nohup
nohup command arg1 arg2 > output.log 2>&1 &

这条命令会启动 command 并将输出重定向到 output.log 文件中。& 符号确保命令在后台运行。

使用 &
command arg1 arg2 > output.log 2>&1 &

这条命令同样会启动 command 并将输出重定向到 output.log 文件中,并在后台运行。

组合使用 nohup 和 &

你可以将两者结合起来使用,以确保进程在后台运行并且忽略 SIGHUP 信号:

nohup command arg1 arg2 > output.log 2>&1 &

在这种情况下,nohup 会忽略 SIGHUP 信号,& 会将命令放入后台执行。

示例代码

下面是一个具体的示例,展示如何使用 nohup& 来后台运行一个命令,并将输出重定向到一个文件中:

#!/bin/bash

# 使用 nohup 和 &
nohup ./your_command arg1 arg2 > output.log 2>&1 &

# 获取后台进程的 PID
echo $! > pid.txt

这段脚本会执行以下步骤:

  1. 使用 nohup 运行 your_command,并将标准输出和标准错误输出重定向到 output.log 文件中。
  2. 使用 & 符号将命令放入后台执行。
  3. 使用 echo $! 获取后台进程的 PID,并将其保存到 pid.txt 文件中。

总结

  • nohup 用于忽略 SIGHUP 信号,并且自动重定向输出。
  • & 用于将命令放入后台执行。

结合使用 nohup& 可以确保你的命令在后台运行,并且即使在终端会话结束后仍能继续执行。


http://www.kler.cn/a/297905.html

相关文章:

  • 【Redis】Redis 典型应用 - 缓存 (Cache) 原理与策略
  • 基于单片机控制的无线烟雾检测报警系统
  • 手机变身无线话筒
  • 【大数据】Hadoop里的“MySQL”——Hive,干货满满
  • DDR3 SDRAM操作流程
  • Redis 集群会有写操作丢失吗?为什么?
  • LeetCode_sql_day21(1440.计算布尔表达式的值)
  • 机器学习 第8章 集成学习
  • 可扩展性、可维护性和可复用性
  • Linux 硬件uart通信
  • ML 系列:机器学习和深度学习的深层次总结(01)
  • 时不我待,与 AI 共舞的新时代已经来临!!!【附全套AI大模型学习资料】
  • Docker Compose version v2.29.2 提示 exited with code 0 解决方案
  • VUE3+Vite 环境变量配置
  • 网络底层协议(包括TR-069、IGMP、VOIP、DHCP、PPPoE、802.11)的分析
  • 11.Java基础概念-ArrayList
  • 电压跟随器的作用是什么?
  • 【redis】认识redis和分布式系统
  • EasyExcel的导入与导出及在实际项目生产场景的一下应用例子
  • 上交团队发布PathoDuet:面向HE和IHC病理切片的自监督学习基础模型|文献精析·24-09-09