linux命令nohup与&

一直用bash连接服务器,在上边跑程序,经常跑着跑着连接断了。。。程序就白跑了,于是才终于想起来查查什么命令可以让我退出命令行关电脑或者断网程序还能在服务器上正常运行。

nohup不挂断的运行命令

&在后台运行,但是当用户退出命令行,程序还是会中断。
注意:使用&所提交的作业并不在作业列表中,也就是说,是无法通过jobs来查看的。如果想关掉进程的话可以通过top列出占用内存比较大的,看看哪个是你运行的,记住进程号,然后kill PID(进程号)

结合起来就是
nohup COMMAND &
这样就能使命令永久的在后台执行

例如nohup python train.py &
但是这样看不到输出的那些信息,不知道运行到哪里了,可以把相关信息输出到文件log.txt里,方便随时查看。

nohup python train.py >log.txt 2>&1 &

如果报错:"nohup: ignoring input and appending output to ‘nohup.out’"因为没有权限,输入chmod +x train.py

下边来解释一下2>&1的含义:
操作系统中有三个常用的流:
  0:标准输入流 stdin
  1:标准输出流 stdout
  2:标准错误流 stderr
  一般当我们用 > console.txt,实际是 1>console.txt的省略用法;< console.txt ,实际是 0 < console.txt的省略用法。
  
 2>&1的意思 是把标准错误(2)重定向到标准输出中(1),而标准输出又导入文件log.txt里面,所以结果是标准错误和标准输出都导入文件log.txt里面了。 至于为什么需要将标准错误重定向到标准输出的原因,那就归结为标准错误没有缓冲区,而stdout有。这就会导致 1>log.txt 2>log.txt 文件log.txt被两次打开,而stdout和stderr将会竞争覆盖,这肯定不是我们想要的.
  这就是为什么有人会写成: nohup ./command.sh >output 2>output出错的原因了

Linux下还有一个特殊的文件/dev/null,它就像一个无底洞,所有重定向到它的信息都会消失得无影无踪。
这一点非常有用,当我们不需要回显程序的所有信息时,就可以将输出重定向到/dev/null,例如nohup python train.py >/dev/null 2>&1 &

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值