Linux nohup 命令详解
nohup
是 Linux/Unix 系统中一个非常有用的命令,用于在用户注销(logout)或终端关闭后仍然运行指定的命令或程序。
基本语法
nohup COMMAND [ARG]...
或者结合 &
在后台运行:
nohup COMMAND [ARG]... &
功能说明
-
忽略挂断信号(SIGHUP):当终端关闭时,系统会向所有关联的进程发送 SIGHUP 信号,默认情况下这会终止进程。
nohup
使命令忽略这个信号。 -
输出重定向:默认情况下,
nohup
会将命令的输出重定向到当前目录下的nohup.out
文件。
常用选项
&
:将命令放入后台执行(虽然不是nohup
本身的选项,但常一起使用)- 重定向输出:可以自定义输出文件而非默认的
nohup.out
使用示例
-
基本用法:
nohup python script.py &
这会在后台运行 Python 脚本,即使关闭终端也不会中断。
-
自定义输出文件:
nohup ./server > server.log 2>&1 &
将标准输出和错误输出都重定向到
server.log
文件。 -
查看 nohup 进程:
jobs -l
或者
ps aux | grep "COMMAND"
-
终止 nohup 进程:
首先找到进程ID:ps aux | grep "COMMAND"
然后使用:
kill -9 PID
注意事项
-
nohup
不会自动将命令放入后台运行,需要显式使用&
。 -
如果命令本身已经处理了 SIGHUP 信号,
nohup
可能不是必需的。 -
某些程序(如交互式程序)可能不适合用
nohup
运行。 -
对于长时间运行的服务,建议使用专门的进程管理工具如
systemd
、supervisord
等。
替代方案
对于现代 Linux 系统,nohup
的一些功能可以被更强大的工具替代:
- tmux/screen:终端复用器,可以保持会话持续运行
- disown:bash 内置命令,从 shell 的作业表中移除作业
- systemd:系统服务管理,更适合持久化服务
nohup
仍然是简单场景下快速保持进程运行的便捷工具。