Linux nohup 命令详解

2,227 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

在工作中,我们可能经常要在服务器上跑程序,有可能要跑的程序耗时很长,需要运行一段时间,我们希望即使关闭终端,程序不受影响,继续运行。在Linux中的nohup命令可以达到这种效果。

nohup是英语 no hangup 的缩写,是不挂断的意思,也就是指程序不退出,用在系统后台不挂断地运行命令,退出终端不会影响程序的运行。

接下来将详细介绍一下nohup命令的具体用法。

命令语法

nohup 命令 参数
nohup 选项

选项说明:

--help     # 显示此帮助信息并退出
--version  # 显示版本信息并退出

示例

下面是一个test.py程序,程序每隔2秒会输出"hello nohup!":

import time 


while True:
    print("hello nohup!")
    time.sleep(2)
    

然后使用nohup python3 test.py运行。

注意:使用nohup命令时,程序的输出会默认重定向到一个nohup.out文件下。如果我们想要输出到指定文件,可另外指定输出文件: nohup python3 test.py > out.txt

其实到现在,还没有真正的做到程序在后台运行,终端关闭不受影响!

如果想让程序真正的在后台运行,可以加上&符号。

nohup python3 test.py > out.txt & 

关闭终端,重新打开,使用ps命令查一下进程,就会发现程序还在运行。

psh@deepin-pc:~/Desktop/test$ ps -aux | grep python
psh       36313  0.0  0.2  17768  8120 ?        S    16:25   0:00 python3 test.py

这里如果想要把标准错误和标准输出都重定向到指定的out.txt文件中,可以使用2>&1符号,2>&1符号的意思是将将标准错误 2 重定向到标准输出 &1。

  • 0 stdin (standard input,标准输入)
  • 1 stdout (standard output,标准输出)
  • 2 stderr (standard error,标准错误输出)
nohup python3 test.py > out.txt 2>&1 & 

nohup命令结合&符号可以使进程在后台运行,即使关闭了终端依然不受影响。

这时,如果想要终止这个进程,要怎么操作呢? 这个可以查看之前分享的文章:Linux下kill掉一个进程的几种方式

原创不易,如果小伙伴们觉得有帮助,麻烦点个赞再走呗~

最后,感谢女朋友在工作和生活中的包容、理解与支持 !