Linux nohup、 &、2>&1以及/dev/null 2>&1

Linux nohup、&、2>&1以及/dev/null 2>&1

nohup命令

nohup命令用于不挂断地运行命令或者说后台运行程序(关闭当前session不会中断改程序,只能通过kill等命令删除)。
使用nohup命令提交作业,如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件。

&命令

&用于后台执行程序,但是关闭当前session程序也会结束

nohup和&的区别

使用&后台运行程序:

  • 结果会输出到终端
  • 使用Ctrl + C发送SIGINT信号,程序免疫
  • 关闭session发送SIGHUP信号,程序关闭

使用nohup运行程序:

  • 结果默认会输出到nohup.out
  • 使用Ctrl + C发送SIGINT信号,程序关闭
  • 关闭session发送SIGHUP信号,程序免疫

平日线上经常使用nohup和&配合来启动程序

  • 同时免疫SIGINT和SIGHUP信号

同时,还有一个最佳实践:

  • 不要将信息输出到终端标准输出,标准错误输出,而要用日志组件将信息记录到日志里

2>&1 &

bash中:

  • 0 代表STDIN_FILENO 标准输入(一般是键盘),
  • 1 代表STDOUT_FILENO 标准输出(一般是显示屏,准确的说是用户终端控制台),
  • 2 三代表STDERR_FILENO (标准错误(出错信息输出)。

箭头:

  • \> 直接把内容生成到指定文件,会覆盖原来文件中的内容[ls > test.txt],
  • \>> 尾部追加,不会覆盖原有内容 [ls >> test.txt],
  • < 将指定文件的内容作为前面命令的参数[cat < text.sh]

2>&1就是用来将标准错误2重定向到标准输出1中的。此处1前面的&就是为了让bash将1解释成标准输出而不是文件1。至于最后一个&,则是让bash在后台执行

/dev/null 2>&1

可以把 /dev/null 可以看作"黑洞". 它等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到.
/dev/null 2>&1则表示吧标准输出和错误输出都放到这个“黑洞”,表示什么也不输出。

示列

如果要后台运行etcd服务,可以使用如下命令:

nohup ./etcd > etcd.out 2>&1 &

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值