在 Linux 中,nohup 命令用于在用户退出登录后继续运行指定的程序。默认情况下,nohup 会忽略挂起(SIGHUP)信号,以确保进程在终端关闭后仍然运行。然而,如果你希望显式地设置 nohup 忽略挂起信号,可以通过以下几种方法实现:
nohup 并重定向输出nohup 命令本身已经默认忽略 SIGHUP 信号。为了确保这一点,你可以按照以下步骤操作:
基本用法:
nohup your_command &
这里,your_command 是你希望运行的命令。& 符号将命令放入后台运行。
重定向输出:
默认情况下,nohup 会将标准输出和标准错误重定向到当前目录下的 nohup.out 文件。如果你希望指定其他输出文件,可以使用:
nohup your_command > output.log 2>&1 &
disown 命令如果你已经启动了一个进程,但未使用 nohup,可以通过 disown 命令将其从当前 shell 的作业表中移除,从而忽略 SIGHUP 信号:
启动进程:
your_command &
使用 disown:
disown -h %1
这里,%1 是作业编号,可以通过 jobs 命令查看。
setsid 命令setsid 命令可以创建一个新的会话,并使进程成为该会话的领头进程,从而忽略 SIGHUP 信号:
setsid your_command &
如果你在编写一个 shell 脚本,可以在脚本开头添加以下代码来忽略 SIGHUP 信号:
#!/bin/bash
trap '' SIGHUP
your_command
你可以通过发送 SIGHUP 信号来验证进程是否忽略了该信号:
找到进程 ID:
ps aux | grep your_command
发送 SIGHUP 信号:
kill -HUP <PID>
如果进程继续运行,说明 SIGHUP 信号已被成功忽略。
nohup 命令本身已经默认忽略 SIGHUP 信号,因此通常不需要额外设置。如果你需要更细粒度的控制,可以使用 setsid 或在脚本中使用 trap 命令来忽略 SIGHUP 信号。确保正确地重定向输出,以便在进程退出后能够查看其日志。