温馨提示×

在Linux中如何使用nohup命令忽略挂起信号

小樊
32
2025-03-01 20:51:22
栏目: 智能运维
Linux服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

在 Linux 中,nohup 命令用于在用户退出登录后继续运行指定的命令或脚本。默认情况下,nohup 会忽略挂起信号(SIGHUP),以防止进程在终端关闭时被终止。以下是如何使用 nohup 命令以及相关配置的详细说明:

使用 nohup 基本语法

nohup command [arguments] &
  • command:要运行的命令或脚本。
  • [arguments]:传递给命令的参数(可选)。
  • &:将命令放入后台运行。

示例

假设你想在后台运行一个名为 my_script.sh 的脚本:

nohup ./my_script.sh &

执行上述命令后,my_script.sh 将在后台运行,即使你关闭终端或注销,它也会继续执行。

输出重定向

nohup 默认会将命令的标准输出和标准错误输出重定向到当前目录下的 nohup.out 文件。你可以自定义输出文件的位置和名称:

nohup ./my_script.sh > output.log 2>&1 &
  • > output.log:将标准输出重定向到 output.log 文件。
  • 2>&1:将标准错误输出重定向到标准输出,即同样写入 output.log
  • &:将命令放入后台运行。

忽略挂起信号(SIGHUP)

默认情况下,nohup 已经忽略挂起信号(SIGHUP),这意味着即使终端关闭,进程也不会被终止。然而,如果你希望显式地忽略 SIGHUP 或其他信号,可以使用 disown 命令或信号处理机制。

使用 disown

在后台运行命令后,可以使用 disown 命令将其从当前 shell 的作业表中移除,从而忽略 SIGHUP:

nohup ./my_script.sh &
disown

或者,可以在启动命令时直接使用 nohup&,然后使用 disown

./my_script.sh &
nohup disown

使用信号处理

如果你需要在脚本中显式地忽略 SIGHUP,可以使用 trap 命令:

#!/bin/bash

# 忽略 SIGHUP
trap '' SIGHUP

# 你的命令或逻辑
while true; do
    echo "脚本正在运行..."
    sleep 10
done

保存上述脚本为 my_script.sh,然后使用 nohup 运行:

nohup ./my_script.sh &

检查后台进程

你可以使用以下命令查看当前后台运行的进程:

jobs

或者使用 ps 命令:

ps aux | grep my_script.sh

终止后台进程

如果你需要终止一个使用 nohup 运行的后台进程,可以使用 kill 命令:

kill -9 <PID>

其中 <PID> 是进程的进程 ID。你可以使用 ps 命令找到进程 ID:

ps aux | grep my_script.sh

总结

  • 使用 nohup 命令可以在退出登录后继续运行命令或脚本。
  • nohup 默认忽略 SIGHUP 信号,确保进程不会因终端关闭而被终止。
  • 可以通过重定向输出到文件来记录命令的输出。
  • 使用 disown 命令可以将进程从当前 shell 的作业表中移除,进一步确保进程不会因终端关闭而被终止。
  • 在脚本中使用 trap 命令可以显式地忽略特定信号。

希望这些信息对你有所帮助!如果有更多问题,请随时提问。

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

推荐阅读:nohup在CentOS中如何忽略挂起信号

0