你是否曾在服务器上运行一个耗时很长的任务,却因不小心关闭终端窗口或 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,再也不用担心终端关闭带来的麻烦了。
