nohup和&的区别


      最近因为某些原因,需要自己去服务器部署项目,出于好奇,专门看了下脚本的命令,然后自己测试了一下。

代码准备

      首先,是java代码:

public class test{
	public static void main(String[] args) throws InterruptedException{
		while(true){
			System.out.println(1);
			Thread.sleep(1000);
		}
	}
}

直接运行(不使用nohup 和 &)

      然后,运行下面命令,执行该代码:

java test.java
java test

      结果就是打印1,直到手动结束。

java test
1
1
1
1
1
1
^C

使用&

      执行以下命令:

java test &

      会先返回:

[1] 25313

      然后就开始打印1,在这期间,即使是手动ctrl C,也无法结束:

java test &
[1] 25313
1
1
1
1
1
^C #尝试ctrl C
1
1
1
1
1
^C #尝试ctrl C

      但如果我们此时关掉这个终端(我是用Xshell连接的,关掉终端指:我关闭这个连接的窗口),这个任务就会结束。
      当然,关掉终端太麻烦了,我最后是通过kill -9 25313结束的。

使用nohup

      执行以下命令:

nohup java test

      会出现如下情况:

nohup java test
nohup: ignoring input and appending output to ‘nohup.out’

      同时,该终端被占用。即:你在这个终端啥也干不了。
      同时,因为没有指定输出文件,所以默认输出到当前目录下的nohup.out
      这时候,关掉终端,任务也会继续运行。
      在被占用的终端上,ctrl C可以结束。当然,kill -9也可以。

使用nohup和&

      执行如下命令:

nohup java test &

      执行结果如下:

nohup java test &
[1] 26273
nohup: ignoring input and appending output to ‘nohup.out’

 

      这时候,终端不会被占用,你可以输入其他命令并执行。
      这时候,ctrl C和关掉终端都不会结束该任务。

结论

使用&

      1. 如果有输出,仍然会输出到终端。
      2. ctrl C能结束
      3. 但关闭终端,任务就会结束。
      4. 终端可以输入其他命令,但如果输出过于频繁,该终端仍无法使用

使用nohup

      1. 如果有输出,不会输出到终端,而是输出到文件。
      2. 在当前终端,ctrl C可以结束任务。
      3. 关闭终端,任务会结束。
      4. 终端可以继续使用。

使用nohup 和 &

      1. 如果有输出,会输出到终端,而是输出到文件。
      2. 在当前终端,ctrl C能结束任务。
      3. 关闭终端,任务会结束。
      4. 终端可以继续使用。

专业说法

      使用Ctrl + C可以发送SIGINT信号,关闭session(终端)发送SIGHUP信号。
      
      使用&,程序拒绝SIGINT信号,接受SIGHUP信号;
      使用nohup,程序接受SIGINT信号,拒绝SIGHUP信号;
      使用nohup和&,程序拒绝SIGINT信号,拒绝SIGHUP信号。

SIGINTSIGHUP
使用&拒绝接受
使用nohup接受拒绝
使用nphup 和 &拒绝拒绝

      

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值