Bash的一个诡异现象

作者: zczhuohuo | 来源:发表于2016-10-05 10:33 被阅读67次

描述

通过 ssh 命令远程登录到 CPU 使用率很高(90%以上)的机器,以 debug 模式(-x)执行 bash 脚本时,你会发现,一些扔到后台执行的命令不会被执行到。

复盘

  1. 使用 stress 命令将机器的 CPU 压到百分之 90 以上。
stress --cpu [机器的核数]
  1. 脚本 test.sh
echo "这是一个测试的脚本"
echo "Hello World!" > tmp.log 2>&1 &
  1. ssh 远程执行命令
ssh host 'sh -x test.sh'

你会发现,不会生成 tmp.log 文件。

解释

我们知道,当我们再 bash 上将一个命令扔到后台执行时,bash 其实是会 fork 一个进程出来,然后在此子进程上执行相关的命令。我们也知道,Linux 是一个操作系统,进程的运行是需要 OS 来进行调度的。当你 fork 一个进程出来之后,该进程能不能马上执行是取决于进程的调度情况的(具体如何调度,得深挖)。导致上述诡异的现象的原因,就在于我们通过 sshdebug 模式运行 bash 脚本,在 CPU 繁忙的时候后台的进程并不会立马执行。这样就会使得当我的 test.sh 脚本执行完了,echo "Hello World!" > tmp.log 2>&1 这条命令还未开始执行。由于 test.sh 进程跟后台进程存在一种父子关系,当 test.sh 的进程退出之后,后台进程也就退出了,命令并不会执行。

解决办法

稍微延迟 test.sh 的退出时间,例如在 test.sh 最后加上:

sleep 0.01

相关文章

  • Bash的一个诡异现象

    描述 通过 ssh 命令远程登录到 CPU 使用率很高(90%以上)的机器,以 debug 模式(-x)执行 ba...

  • 诡异现象

    大自然中存在着许多诡异现象,都无法解释清楚。 二0一0年的五月,我在当地煤厂上班 ,因为我们这个班组是掘井班,上班...

  • 诡异现象

    上周六车子保养,掀开引擎盖,车子里一堆毛发,什么鬼?哪来的? 服务的小哥,见多识广,见怪不怪,一副有经验的样子,问...

  • 诡异现象

    2021年10月1日,我在花鸟市场上购买了一幅像虎又像猫的书法字画。 2021年10月10日,我搬新居,因为一个人...

  • 诡异的日式现象

    最近最让人诡异的事情就是日本抗疫数据,自奥运以来,新增数据从每天一两万人到现在的百人以下,为什么关心起日本的疫情,...

  • ThreadLocal使用诡异现象

    ThreadLocal使用诡异现象 1. 前言 ThreadLocal不多说了,在线程中维护一个Thread.Th...

  • (白话)一个很诡异的现象 :shouldStartLoadW

    一个项目组的同事遇到一个问题,他说在test环境WebView调用了shouldStartLoadWithRequ...

  • 量子力学的诡异现象

    量子力学也是自然科学史上被实验证明最精确的一个理论,但是量子的观念,没有人能够理解。我说的没有人能够理解,绝不是指...

  • 可变对象导致的诡异现象

    当时在做这么一个需求,需要统计一个应用的所有调用信息,包括各个ip的调用信息,整个应用所有的调用信息。流程大...

  • 在灵性圈子的诡异现象

    在灵性圈子的诡异现象 这篇内容的重点在于描述灵性圈子的各种奇葩人士和他们的古怪行为,如果你认为这是一篇心灵鸡汤或者...

网友评论

    本文标题:Bash的一个诡异现象

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