nohup命令_每天一个Linux命令之nohup

关于nohup的一些使用和命令详解

因为工作原因,有诸多项目和流程需要测试,有时候可能因为各种原因,不小心关闭了ssh客户端,这就会导致一个很尴尬的问题,挂载的任务会终端,如果数据量少的话,重新跑一次流程就好了,万万就怕数据量巨大,在做拼接,比对的时候断一次是真的让人心碎。此时我们可以使用nohup命令来让进程持续运行,不会随着SSH客户端的关闭而结束。

nohup介绍

nohup 命令主要是忽略所有挂断信号,从而使命令任务在后台一直运行下去,当然nohup常与&连用。同时会有一个默认的nohup.out文件输出,主要是用来查看运行过程中的一些输出中间信息等。命令如下

nohup + 所运行的代码

示例 这是我正在运行的一个做数据分析的一个代码

nohup Rscript /database/proteome/Statistics/Labelfree/LabelfreePipeline.R -i ./ -s B

运行命令,结果展示

48e0043f2d67bfdb47b46475a591b4d3.png

生成的nohup.out文件则会写成这样

96da8f56b5cf8a28d9a77685da207d83.png

直接在前台运行结果这是会变成这样

936dbc34d0e558e213b51836bc93e19b.png

关键区别

针对前面两种结果其实有很尴尬的问题,都出现了Error。
对于error来说,nohup,因为只会有输出nohup.out文件,所以不会直接在屏幕显示,这就会让一直没有挂载后台喜欢的你,以为结果没问题,从而进行下一步处理。导致后期各种错误结果,却找不到最初的错误原因。

查看任务

和nohup紧密相关的除了&之外还有还有就是jobs jobs主要的作用就是用来查看挂载在后台的任务有哪些

结果 2c0d274575a87074e634f0375bf24719.png

jobs主要的几种情况就是

情况表示含义
Running正在执行
Exit有error
Terminated暂停
Done结束

关于jobs的更多信息,后续会有描述

nohup的输入和输出

关于nohup 的输入输出主要有以下几点

code标准解释
0stdin (standard input)标准输入标准输出
1stdout (standard output)标准输出
2stderr (standard error)标准错误
nohup code.sh > nohupout.txt 2>&1

>nohupout.txt 表示将标准输出输出到nohupout.txt中,也就相当于 1>nohupout.txt

2> error 表示将错误输出到error文件中

2>&1 也就表示将错误重定向到标准输出上

关于困惑的应该主要是2>&1

这个意思是把标准错误 重定向到标准输出中,而标准输出又导入文件nohupout.txt里面

至于为什么需要将标准错误重定向到标准输出的原因,那就归结为stderr没有缓冲区,而stdout有。这就会导致 >nohupout.txt 2>nohupout.txt 文件nohupout.txt被两次打开,而stdout和stderr将会竞争覆盖,这会是nohupout.txt结果混乱,不是我们想要的

这就是为什么有人会写成:

nohup code.sh >nohupout.txt 2>nohupout.txt出错的原因了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值