Linux中的Nohup命令
Nohup代表'no hang up(没有挂断)'。
即使在注销后,它也是一个非常有用的命令。
Linux中的Nohup命令允许您在注销后运行命令
在SSH连接上运行的时间采取命令中可以找到最常用的使用之一。
如果我们认为SSH会话可能会丢弃,我们可以使用Nohup的命令以此时尚:
nohup your_command &
什么是nohup命令?
Nohup可以被视为包装纸。
我们将命令添加为Nohup,如下所示:
nohup COMMAND ARGS ....
NoHUP的目的是拦截和阻止升降信号到达命令。
当我们使用NOHUP前缀命令时,将从不可读的文件中重定向输入(NOHUP命令</dev/null)。
在简单的单词中,如果需要向该命令发送输入,请不要将命令调用nohup。
当你不知所一个命令时,它需要能够无人看管。
Nohup首先尝试将输出重定向到./nohup.out或者如果需要,将它发送到~/nohup.out。
我们还可以决定其中重定向输出:
nohup COMMANDS >/path/to/output/file
关于NOHUP没有多大说法,它没有长期的选项列表。
只有-help和-version。
使用nohup命令的示例
使用NOHUP执行脚本就像这样简单。
nohup ./nhp.sh
请注意,NOHUP没有将过程丢弃到后台。
Nohup只是那里拦截突破信号。
运行命令后,我们可以继续并关闭终端。
它会警告过程正在运行。
确认我们要杀死它。
关闭终端时,所有子进程都收到了SIGHUP信号。
NOHUP阻止该信号到达我的命令。
下图显示了有关终端运行时我的命令的过程信息。
你看到了ppid吗?
这是父进程ID。
当我们要求关闭终端时,PPID的所有子项都会收到突出信号。
NOHUP阻止了信号从到达我们的脚本。
父进程终止,我们的脚本得到了孤立。
当进程获取孤立时,它会自动将1(systemd或者init)分配为父级。
正如你所看到的,它真的不难证明使用NOHUP。
非常简单的命令。
我们可以在背景中拼接到后台:
nohup ./nhp.sh &
我们还可以确定输出被重定向到的位置:
nohup ./nhp.sh >/path/to/file &
请注意,如果关闭或者重新启动Linux系统,它将杀死该命令。
当我们请求关闭或者重新启动时,所有进程都接收Sigterm,然后是Sigkill。
这些信号不是由NOHUP拦截的。
通过ssh连接nohup
当我们学习NOHUP时,一次经常在脑海中致意的用途是能够通过SSH在远程计算机上启动进程。
逻辑上,使用NOHUP运行命令将允许我们从SSH连接注销,并且仍将运行该过程。
nohup COMMAND &
一个常见问题是,有时SSH会在注销时"挂起"。
这是因为SSH经常拒绝丢失任何背景过程的任何数据流。
然后它将"挂起"直到过程终止。
通过重定向所有3个数据流通常可以处理此问题。
nohup COMMAND >./nohup.out 2>./nohup.err &