文档章节

nohup介绍

BookShu
 BookShu
发布于 2017/09/05 06:53
字数 1078
阅读 454
收藏 36

背景

  我们通常使用&将前台任务变为后台任务执行,但是如果只是使用&,那么在突然断网或者关闭启动该任务的终端(ps:可使用putty来测试,部分软件如mobaxterm做了优化,关闭终端是友好关闭的)时,内核就会给后台任务发送SIGHUP信号,从而导致后台任务停止。这时,我们就需要使用nohup来启动该后台任务。

简介

  nohup,顾名思义,就是使得运行的命令可以忽略HANGUP信号。因此,即使突然断网或者关闭终端,该后台任务依然可以继续执行。
  这里需要指明的是,nohup并不会自动将任务运行在后台,我们需要在命令行末尾加上&来显示的指明。

进阶

  如果nohup命令的标准输入是终端,那么nohup将会默认使用/dev/null来重定向。
  如果nohup命令的标准输出是终端,那么标准输出会被附加到文件nohup.out中;如果用户没有在当前目录创建文件的权限,那么就会把输出附加到$HOME/nohup.out中;如果还是没有写入权限,那么该命令就不会执行。
  如果nohup命令的标准错误是终端,那么就会被定向到标准输出的附加的文件描述符。如果标准输出被关闭了,那么标准错误就会像上面一样尝试附加到nohup.out$HOME/nohup.out中。

测试

  这里,我们先创建一个需要较长时间来执行的脚本。该脚本会打印一个数字(标准输出),删除一个不存在的文件(标准错误输出)。

$ vi test.sh
for i in `seq 1 20`; do echo $i; rm a.txt; sleep 1; done

默认参数

  我们来后台执行该文件。

$ nohup sh test.sh &
[1] 9119
$ nohup: ignoring input and appending output to 'nohup.out'

  在上面执行的命令中,由输出nohup: ignoring input and appending output to 'nohup.out'可知,标准输出被重定向到nohup.out中,我们查看下该文件。

$ head nohup.out
1
rm: cannot remove 'a.txt': No such file or directory
2
rm: cannot remove 'a.txt': No such file or directory
3
rm: cannot remove 'a.txt': No such file or directory
4
rm: cannot remove 'a.txt': No such file or directory
5
rm: cannot remove 'a.txt': No such file or directory
...

  该文件包含了命令的标准输出和标准错误输出。

重定向标准输出

$ nohup sh test.sh 1>o.out &
[1] 9378
$ nohup: ignoring input and redirecting stderr to stdout

  在上面执行的命令中,可知,标准输出被重定向到stdout中,而标准输出又重定向到了o.out中,我们查看下该文件。

$ head o.out
1
rm: cannot remove 'a.txt': No such file or directory
2
rm: cannot remove 'a.txt': No such file or directory
3
rm: cannot remove 'a.txt': No such file or directory
4
rm: cannot remove 'a.txt': No such file or directory
5
rm: cannot remove 'a.txt': No such file or directory
...

  该文件包含了标准输出和标准错误输出的。

重定向标准输出标准错误输出

$ nohup sh test.sh 1>o.out 2>e.out &
[1] 9490

  这一次,终端没有其他输出。我们直接查看命令行中的两个文件。

$ head o.out
1
2
3
4
5
6
7
8
9
10

$ head e.out
nohup: ignoring input
rm: cannot remove 'a.txt': No such file or directory
rm: cannot remove 'a.txt': No such file or directory
rm: cannot remove 'a.txt': No such file or directory
rm: cannot remove 'a.txt': No such file or directory
rm: cannot remove 'a.txt': No such file or directory
rm: cannot remove 'a.txt': No such file or directory
rm: cannot remove 'a.txt': No such file or directory
rm: cannot remove 'a.txt': No such file or directory
rm: cannot remove 'a.txt': No such file or directory

shell脚本中执行nohup的问题

  如果我们在shell中执行nohup命令,并且没有进行任何重定向,那么终端上就会弹出“nohup: ignoring input and appending output to 'nohup.out'”,并且,只有敲击回车,shell才能继续执行,否则就会卡住。
  经过试验,发现只要重定向了标准错误输出,终端就不会弹出任何提示,也不会卡住。但是标准错误附加的文件会出现其他的错误提示,只有重定向所有标准输入、标准输出和标准错误输出后,不会有任何错误提示。如:

$ nohup sh test.sh >out.log 2>&1 </dev/null &

参考

http://www.cnblogs.com/allenblogs/archive/2011/05/19/2051136.html http://www.cnblogs.com/lovemo1314/archive/2011/07/13/2105472.html http://www.gnu.org/software/coreutils/manual/html_node/nohup-invocation.html#nohup-invocation https://stackoverflow.com/questions/24646320/nohupignoring-input-and-appending-output-to-nohup-out

© 著作权归作者所有

共有 人打赏支持
BookShu
粉丝 30
博文 116
码字总数 86364
作品 0
西安
高级程序员
storm 及kafka总是无缘无故Session close

最近在搞kafak+storm+flume实时处理,但是kafka与storm总是会自己莫名死掉,查看日志就是下面的内容: 2015-07-22T03:15:31.808+0800 b.s.event [INFO] Event manager interrupted 2015-07-...

晨磊
2015/07/22
0
0
linux任务后台执行方法

我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务, 结果却由于网络的不稳定导致任务中途失败。如何让命令提交后不受本地关闭终端窗口/网络断...

cdsc
2016/06/22
47
0
搭建Jetbrains家族IDE授权服务器

下载后有很多版本,如果你电脑是windows,对应的使用windows后缀的,Mac OS使用darwin后缀, Ubuntu/centos等没有对应后缀的用linux,要注意区别32/64位,amd64是64位,386是32位。 windows下...

QIANG008
2016/11/13
0
0
谈shell之信号捕捉及处理

Shell 中常用的几个信号 在64位系统上,执行kill –l 命令可以看到几乎所有的信号[shell@u ~]$ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGF...

123yph321
2013/07/16
0
0
IntelliJIDEALicenseServer Linux 部署

服务器下载地址:点击我 下载后有很多版本,如果你电脑是windows,对应的使用windows后缀的,Mac OS使用darwin后缀, Ubuntu/centos等没有对应后缀的用linux,要注意区别32/64位,amd64是64位...

void_ZZ
2017/11/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Python深体验,常见的数据处理方式(必须要懂的)

1.缺失值处理 - 拉格朗日插值法 input_file数据文件内容(存在部分缺失值): from scipy.interpolate import lagrangeimport pandas as pdimport numpy as npinput_file = './dat...

无也Python
24分钟前
2
0
Spring MVC注解故障追踪记

Spring MVC是美团点评很多团队使用的Web框架。在基于Spring MVC的项目里,注解的使用几乎遍布在项目中的各个模块,有Java提供的注解,如:@Override、@Deprecated等;也有Spring提供的注解,...

Skqing
26分钟前
4
0
区块链入门教程以太坊源码分析cmd包分析

  兄弟连区块链入门教程以太坊源码分析cmd包分析。 ### cmd包概述 * geth 主要Ethereum CLI客户端。它是Ethereum网络(eth主网,测试网络或私有网)的入口点,使用此命令可以使节点作为ful...

兄弟连区块链入门教程
28分钟前
1
0
@Autowired 报红线

代码可正常跑,不过红线看着有点难受,解决方案 使用@Autowired(required=false) 或者@Resource. 这两者区别网上一大堆

斩神魂
33分钟前
1
0
DataTable中检索信息 (C#)

C#_从DataTable中检索信息 存在于内存中的虚拟表DataTable,绑定在数据显示控件后,如果想在再检索其中某些信息,可以利用DataTable.Select方法进行检索,避免了重复的读取数据库。Select方法...

CS-CS01
41分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部