在 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。&:将命令放入后台运行。默认情况下,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 命令可以显式地忽略特定信号。希望这些信息对你有所帮助!如果有更多问题,请随时提问。