别把&和nohup混为一谈, 根本不是同一个东西好不好 ------ 聊聊./a.out & , nohut ./a.out , nohup ./a.out &的区别

       在第一家公司工作的时候, 我认识了&.

       在第二家公司工作的时候, 我认识了nohup,  这就是渊源。  

 

       随后, 我就一直糊涂用他们, 但并不懂这两个东西。

       网上很多地方是乱扯, 瞎复制, 为什么不自己实践一下呢?

 

     看个小程序:

#include <stdio.h>
#include <unistd.h>

int main ()
{
	int x = 0;
	while(1)
	{
		printf("hello %d, pid %u, ppid %d\n", x++, getpid(), getppid());
		sleep(1);
	}
 
	return 0;
}

       生成可执行程序a.out,  下面, 我会在我的linux机器上进行测试!!!

 

       &的意思是在后台运行, 什么意思呢?  

      意思是说, 当你在执行 ./a.out & 的时候, 即使你用ctrl C,  那么a.out照样运行(因为对SIGINT信号免疫)。

      但是要注意, 如果你直接关掉shell后, 那么, a.out进程同样消失。 可见, &的后台并不硬(因为对SIGHUP信号不免疫)。

 

      nohup的意思是忽略SIGHUP信号, 什么意思呢?

      当运行nohup ./a.out的时候, 关闭shell, 那么a.out进程还是存在的(对SIGHUP信号免疫)。

      但是, 要注意, 如果你直接在shell中用Ctrl C, 那么, a.out进程也是会消失的(因为对SIGINT信号不免疫)

 

      原来如此!

 

      所以, &和nohup没有半毛钱的关系, 要让进程真正不受shell中Ctrl C和shell关闭的影响, 那该怎么办呢? 那就用nohua ./a.out &吧, 两全其美。

 

      如果你懂守护进程, 那么nohup ./a.out &颇有点让a.out成为守护进程的感觉。

 

  • 21
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 19
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值