如何让命令继续运行,当关闭console后

昨天下班的时候听同事抱怨用ssh登录远端linux,运行一个命令,没想到花费时间超出预期,到下班还没结束,又不能关掉console,否则命令就terminate了。

想了想这方面的知识,nohup, &等等,查了下以备后用。

首先,当关掉console或者因网络故障console断开,远端linux就会收到一个HUP(hangup)信号,然后linux就会关闭之前连接(tty)以及它的所有子进程,这个导致了命令的终止。

知道了原因就有两种解决方法:

  • 让命令不受到hup信号的干扰
  • 让命令进程不再是连接(tty)的子进程

nohup

在命令前加nohup,例如: 

nohup ping 9.111.250.139 

这样当console被关闭时命令不会终止。

setid

在命令前加setid, 例如:

setid ping 9.111.250.139

这样这个ping命令的父进程变成了起始进程#1,所以当console被关闭时,它任然没事。

&

将命令放入()并在末尾加&, 例如:

(ping 9.111.250.139 &)

这样做,ping的父进程也是#1,所以也能逃过一劫

 

但是,如果命令在运行时候并没有加上上述技巧还有救吗? 有救!

disown

首先,如果运行在前台(没有在末尾加&),那么使用ctrl + z使命令暂停,然后用jobs查看命令号(jobspec)。

然后使用bg jobspec让命令恢复运行在后台,最后用disown -h jobspec 把改命令设置为忽略hup信号就成了。

解释一点:为啥要用ctrl+z来暂停命令呢,因为我们要得到命令号(jobspec),但是jobs这个命令只能列出当前进程的子进程,所以只能在当前 console下运行jobs。

另外:jobspec在output中是个数字,但是使用的时候再数字之前要加%

当然如果在命令运行在后台(末尾加&),那就简单了,直接用jobs查出jobspec,然后用disown就可以了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值