linux终端进程bash,让Linux的进程不受终端影响

使用SSH远程登陆上Linux服务器,运行一些耗时的任务时,如果因为网络中断,这些任务也会就此中断,应此需要这些任务不受终端断开而影响,首先先看下图:

c16284e66941447b06fac1d6d5b35036.gif

这是运行以下命令的结果 : ping localhost > /dev/null &,很明显ping是sshd的子子进程,因此当sshd断开连接时,ping命令必然会终止。

以下有几种方法避免此种情况发生:

一、使用nohup:

在网络断开和logout时,终端会收到hup信息,因此会关闭其所有子进程,nohup正是针对此情况:

运行如下命令: nohup ping localhost > /dev/null & ,然后断开终端,可以看到:

953af58cc9055305b202eac3a2b0dd89.gif

断开终端之后,父进程ID变为1,即被init所接管的孤儿进程,因为其原来的父进程30999已经退出。

二、使用setuid

setuid ping localhost > /dev/null &

cc6975ebca8bcd5f495a84b220fc7663.gif

可见setsid直接将其父进程ID设置1

三、使用()加上&元字符

运行如下命令:( ping localhost > /dev/null &)

27658a2a53616918786b77eaea2c8c96.gif

同setsid一样结果,过程是如下的

├─sshd─┬─sshd─┬─bash───bash───ping

因为&是元字符,因此会新开一个bash来解释执行ping,然后()使ping成为子shell,右边的bash在解释完毕后会退出,但是ping子进程还在,因此使其成为孤儿进程,被init接管。

四、使用screen

可能需要手动安装 yum install -y screen

常用命令:

screen:启用一个screen会话

键入C-a c ,按下Ctrl键+a组合键,然后再按下c键:会在当前screen会话中新建一个窗口/BASH

0a915b188cf5893cbb4700bca2509a76.gif

exit:如果是该screen会话的唯一窗口,该screen会话将会退出,否则screen会切换到前一个窗口。

screen -d pid:detach分离screen会话

810010461ec615398eae9638822dea37.gif

screen -r pid:reattach重新附着会话,比如你可以在一个会话中前台运行ls -R  /,然后退出screen会话,再reattach该会话,可以发现仍在继续执行或者已经执行完毕。

五、使用disown

用法如下:

disown -h jobspec : 让某个作业忽略HUP信号。

disown -ah : 让所有作业忽略HUP信号。

disown -rh : 让正在运行的作业忽略HUP信号。

针对作业,适用于运行时比如加了 & 的命令,使用此命令后会将其从作业列表中删除,如果是前台运行的命令的话,可以先按Ctrl+Z,然后bg jobspec,再使用disown即可。0b1331709591d260c1c78e86d0c51c18.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值