nohup
是 Linux 系统中的一个命令,用于在后台运行程序,即使用户退出登录也不会终止程序的执行。这个命令非常有用,尤其是在需要长时间运行的任务或者服务器维护时。
nohup
命令的全称是 "no hang up",它的作用是忽略挂起(SIGHUP)信号。当用户注销或断开 SSH 连接时,系统会发送 SIGHUP 信号给所有由该用户启动的进程,通常这会导致进程终止。使用 nohup
可以防止这种情况发生。
nohup
主要是一个命令行工具,用于启动程序。假设你有一个 Python 脚本 my_script.py
,你想让它持续运行,即使在 SSH 会话结束后也是如此:
nohup python my_script.py &
这条命令会在后台启动 my_script.py
,并且忽略挂起信号。输出会被默认重定向到当前目录下的 nohup.out
文件。
如果你想将输出重定向到特定的文件,可以这样做:
nohup python my_script.py > output.log 2>&1 &
这里 > output.log
将标准输出重定向到 output.log
,2>&1
表示将标准错误也重定向到标准输出,即同样写入 output.log
。
原因:可能是因为程序本身捕获了 SIGHUP 信号并做了处理,或者是因为程序有其他的依赖条件导致无法在后台稳定运行。
解决方法:
nohup
正确启动程序,并且程序没有捕获 SIGHUP 信号。disown
命令,它可以让你从当前 shell 的作业表中移除作业,使其不受 SIGHUP 信号的影响。python my_script.py &
disown
setsid
命令,它可以在新的会话中启动进程,完全脱离原会话的控制。setsid python my_script.py &
通过以上方法,你可以确保程序在后台稳定运行,不受终端关闭的影响。
领取专属 10元无门槛券
手把手带您无忧上云