在 Linux 中,nohup
命令用于在用户退出登录后继续运行指定的命令或脚本。它可以使进程忽略挂起(SIGHUP)信号,从而防止进程在终端关闭时被终止。以下是如何使用 nohup
命令忽略挂起信号的详细步骤和示例:
nohup [选项] 命令 [参数...] &
-h
: 显示帮助信息。-i
: 在接收到 SIGHUP 信号时发送 SIGINT 信号给子进程。-c
: 不重定向标准输入、输出和错误,保持与终端相同的连接。编写你的命令或脚本
假设你有一个名为 my_script.sh
的脚本,内容如下:
#!/bin/bash
while true; do
echo "脚本正在运行..."
sleep 5
done
确保脚本具有可执行权限:
chmod +x my_script.sh
使用 nohup
运行脚本
在终端中输入以下命令:
nohup ./my_script.sh &
解释:
nohup
: 启动命令并忽略挂起信号。./my_script.sh
: 要运行的脚本。&
: 将命令放入后台运行。查看输出
默认情况下,nohup
会将标准输出和标准错误重定向到当前目录下的 nohup.out
文件。你可以使用以下命令查看输出:
tail -f nohup.out
终止进程
如果需要终止使用 nohup
运行的进程,可以使用 ps
命令查找进程 ID(PID),然后使用 kill
命令终止:
ps aux | grep my_script.sh
kill -9 PID
替换 PID
为实际的进程编号。
假设你想在后台运行一个 Python 脚本 server.py
,可以这样做:
nohup python3 server.py &
运行后,检查 nohup.out
文件以查看脚本的输出:
tail -f nohup.out
输出重定向:默认情况下,nohup
会将输出重定向到 nohup.out
。如果你想将输出重定向到其他文件,可以手动指定:
nohup ./my_script.sh > output.log 2>&1 &
这样,标准输出和标准错误都会被写入 output.log
。
后台运行:使用 &
将命令放入后台运行。如果不加 &
,nohup
会阻塞终端直到命令结束,这通常不是你想要的效果。
环境变量:nohup
运行的进程可能无法访问当前 shell 的所有环境变量。如果需要特定的环境变量,可以在命令前手动设置。
安全性:确保你运行的命令或脚本是安全的,尤其是在使用 nohup
在后台长时间运行时,避免潜在的安全风险。
通过以上方法,你可以有效地使用 nohup
命令在 Linux 中忽略挂起信号,确保进程在你退出登录后继续运行。