你肯定遇到过这种情况:在服务器上跑着一个耗时很长的任务,结果不小心关掉了终端窗口,或者SSH连接断开了,一切前功尽弃。这时候,nohup 就是你的救星。它的全称是 "no hang-up",直译过来就是“不挂断”——让程序在后台安安静静地跑,哪怕你退出登录,它也照样干自己的活。

基本用法
用起来其实很简单,就一行命令的事。
运行命令并忽略挂起信号:
nohup command &command就是你想运行的程序或脚本。&符号把命令丢到后台,这样你就能继续干别的事了。
重定向输出:默认情况下,
nohup会把标准输出和标准错误输出都扔进一个叫nohup.out的文件里。如果你不想用这个名字,也可以自己指定输出文件:nohup command > output.log 2>&1 &>把标准输出重定向到output.log。2>&1把标准错误输出也送到同一个地方,也就是output.log。这样日志就干干净净地集中在一起了。
示例
举个例子,假设你有个 Python 脚本 script.py 要跑,希望输出记录到 script_output.log 里:
nohup python script.py > script_output.log 2>&1 &
搞定,脚本就在后台默默运行了,你可以安心关掉终端,甚至下班回家。
检查进程状态
怎么知道它还在不在跑?用 ps 命令查一下:
ps aux | grep script.py
如果看到对应的进程,说明它还在兢兢业业地工作。
终止进程
哪天想让它停下来,找到它的进程ID(PID),然后送一个 kill 信号:
kill -9
-9 是 SIGKILL,强制终止,不给它任何反抗的机会。
注意事项
- 用了
nohup的程序会一直运行,直到它自己结束或者你手动杀掉它。 - 如果在SSH会话里运行
nohup命令,即使关闭SSH连接,程序也不会停止——这正是它存在的意义。 - 确保你有足够的权限运行命令,并且有权限写入输出文件所在的目录,否则会报错。
掌握了这些,你就可以放心地把那些耗时任务交给 nohup,再也不用担心终端关闭带来的麻烦了。