Linux nohup命令

nohup命令用于运行程序或者命令,并指忽略所有中断信号SIGHUP。SIGHUP是当前控制终端关闭时发送到进程的信号

3 min read
By myfreax
Linux nohup命令

nohup命令用于运行程序或者命令,并指忽略所有中断信号SIGHUPSIGHUP是当前控制终端关闭时发送到进程的信号。

通常,当您通过SSH运行命令时,如果连接断开,或者退出SSH,SSH会话将终止在当前tty启动的进程。

如果你不想被某一程序被终止,可以使用nohup命令。它将忽略所有中断信号,命令程序将继续运行。

nohup命令的语法形式是nohup COMMAND [ARGS]nohup命令仅接受标准的--help--version选项,除此之外没有任何其它没有任何其它选项。

nohup python3 -m http.server命令将会在前台启动python的HTTP服务器,并将HTTP服务器的标准输出重定向到nohup.out文件。

nohup.out文件创建在当前工作目录中。如果运行nohup命令的用户没有当前工作目录的读写权限,nohup.out文件写到用户的家目录中。

此时如果您注销或关闭终端,python的HTTP不会不会被终止。

后台运行

nohup在前台使用不是很有用,因为在命令完成之前,您将无法在当前tty交互。要使nohup在后台运行,请在命令末尾添加&符号。

nohup python3 -m http.server &命令将在后台运行python的HTTP服务器,并在终端上打印作业ID和进程ID。

当nohup作业进入后台运行后,如果你想将nohup的作业放在前台运行,您可以使用fg命令并指定作业ID,让作业在前台运行。

如果由于某种原因要终止进程,请使用kill命令后跟进程ID,例如命令kill -9 25132

输出重定向

默认情况下,nohup会将所有标准输出重定向到nohup.out文件。如果要将命令标准输出重定向到其他文件,可以使用shell的重定向。

nohup python3 -m http.server > http.out 2>&1 &命令将python的HTTP服务器标准输出和标准错误重定向到文件http.out

nohup python3 -m http.server > http.out 2> httperr.out &命令将python的HTTP服务器标准输出重定向到文件http.out。标准错误重定向到文件httperr.out

nohup python3 -m http.server > /dev/null 2>&1 &命令标准输出和标准错误都不写到文件。

/dev/null或者称空设备。在类Unix系统中是一个特殊的设备文件,它丢弃一切写入其中的数据,但报告写入操作成功,读取它则会立即得到一个EOF。

在程序员行话,尤其是Unix行话中,/dev/null被称为比特桶或者黑洞。

至此,您应该很好地理解如何使用该nohup命令来防止在注销或退出终端时终止命令