nohup 的作用可以将程序以忽略挂起信号(SIGHUP)的方式运行。常见的用法是和& 命令一同使用。 通俗的说,nohup可以在终端断开连接时,依旧能够保证断开连接前执行的程序继续执行。
举个栗子:
public class Test {
public static void main(String[] args) throws Exception {
Thread.sleep(25 * 60 * 1000);
}
}
终端1:
congqingquan@localhost Desktop % javac Test.java
congqingquan@localhost Desktop % java Test &
[1] 18414
congqingquan@localhost Desktop % ps -ef | grep java
501 18414 18399 0 2:26上午 ttys000 0:00.11 /usr/bin/java Test
501 18417 18399 0 2:26上午 ttys000 0:00.00 grep java
congqingquan@localhost Desktop %
关闭终端1的窗口
终端2:
congqingquan@localhost ~ % ps -ef | grep java
501 18429 18319 0 2:27上午 ttys001 0:00.00 grep java
congqingquan@localhost ~ %
使用nohup解决
终端1:
congqingquan@localhost Desktop % nohup java Test > /dev/null 2>&1 &
[1] 18493
congqingquan@localhost Desktop % ps -ef | grep java
501 18493 18468 0 2:31上午 ttys000 0:00.12 /usr/bin/java Test
501 18497 18468 0 2:31上午 ttys000 0:00.00 grep java
congqingquan@localhost Desktop %
关闭终端1的窗口
终端2:
congqingquan@localhost Desktop % ps -ef | grep java
501 18493 1 0 2:31上午 ?? 0:00.21 /usr/bin/java Test
501 18515 18319 0 2:32上午 ttys001 0:00.00 grep java
congqingquan@localhost Desktop %
关于下面命令每个组成部分是什么意思,可以看我以往的Blog:
- &与&&、|与|| 、/dev/null
- 重定向符号
nohup java Test > /dev/null 2>&1 &