美文网首页
close ssh process lead to ssh st

close ssh process lead to ssh st

作者: 张培_ | 来源:发表于2017-08-25 20:16 被阅读10次

情景描述

  • 在A机器运行ansible通过ssh登录方式将B作为远端服务器
  • A在获取到的终端上执行一个C进程
  • 当ansible在remote computer的task全部执行完毕之后,发现C进程挂了

问题分析

  • Q1:为什么C在进程在Task全部执行完毕之后挂了?
  • A1:Task全部执行完毕,那么从Assh到B的服务也就停止了。ssh停止那么C进程也就挂了

  • Q2:那么为什么ssh停止了C就挂了呢?
  • A2:我猜想是ssh服务启动了C进程,ssh服务停止了,那么C必然会停止。经过查资料发现:

    通过ssh进程启动的进程是ssh的子进程,父进程一旦被kill相应的所有的子进程会全部被kill


  • Q3:那么不是说ssh的服务会在开机的时候就启动在22端口为什么会在Task结束被kill呢?
  • A3:其实这里是说错了概念,在这里重新学习一下ssh的具体概念:
    • 首先ssh只是一个协议用来进行计算机直接的加密登录。我们每个人的电脑上都会默认启动22端口用来监听通过ssh协议发过来的请求。本机首先启动ssh链接,相应的就会启动链接进程。然后如果链接成功会启动一个bash进程(还有其他的进程)这里就是ssh的客户端
    • 对于服务器端也就是远程,ssh获取请求然后启动sshd服务端口用来启动客服端所请求的bash(这个服务的父进程是操作系统)
    • 所有在这个终端上的进程的父进程都是这终端
    • 客服端终止ssh其实就是终止了这个bash进程以及的(本次)连接进程。那么服务器端的bash进程kill相应的子进程全部中止。

  • Q4:那么为什么我vagrant ssh一次ping baidu。然后本地在开一个terminal tab再次vagrant ssh立刻退出,前一个tab的ping没有终止?
  • A4:因为你每一次ssh都通过ssh服务在本机启动了不同的bash服务,对于远端也是一样的他们认为这是两个bash服务,所以ping的父进程和你终止的bahs不是同一个进程所以不会被杀死。

  • Q5:那么如果我希望c进程不会因为bash exit而终止该如何做呢?
  • A5:那么就需要想办法让你进程的父进程不是bash。使用nohup command &

反思

  • Linux整个的操作系统的一些指令都只是会用缺乏网络基础知识理解起来十分困难。

action

  • 我现在能做的就是遇到问题记下来,然后找到解决办法。原理尽全力理解,但是还是需要有时间好好理解看看有关计算机网络方面的书籍。总的来说,还是要坚持每天看书才能加大我的知识范畴。遇到问题也有知识可以解决。

相关文章

网友评论

      本文标题:close ssh process lead to ssh st

      本文链接:https://www.haomeiwen.com/subject/gujpdxtx.html