zoukankan      html  css  js  c++  java
  • Linux服务器挂死案例分析

    问题现象:

    在linux服务器上运行一个指定的脚本时,就会出现无数个相同进程的,而且不停的产生,杀也杀不掉,最后系统就陷入死循环,无法登陆,只能人工去按机器的电源键才可以。这够崩溃的吧?

    问题分析过程:

    在分析过程中发现这个特定的脚本有些特别,和系统中已有的命令的名字是相同的。

    以free命令为例:

    这个脚本名字就叫做free(后面没有带.sh),而且这个脚本文件里又去调用了free命令。

    这个脚本的本意应该是要去调用free命令来完成一个任务。

    那是否就是因为这样就会导致问题呢?

    其实光这样是不会出问题的,因为脚本的调用一般要采用如下两种方式来调用:

    方式一、sh free

    方式二、./free

    如果直接执行free,会去调用系统命令中的free,而不是当前这个脚本,那也就不会出现问题了。

    另外一个条件就是环境变量的配置(Linux中环境配置文件可能为:.bash_profile .profle .bashrc):

    对于PATH这个变量的配置,如果这个变量中包含了.,如

    PATH=.:xxx:/sbin:/bin:/usr/sbin

    在PATH中包含了. 之后,会发生什么样的效果呢,执行命令时,会在当前目录下去查找命令,如果我们把点加到了PATH变量的最前面,那就会优先在当前目录下查找命令。

    此时再在当前目录下执行free,就会执行我们命名为free的脚本文件,而脚本文件又会调用自身,以此形成死循环。


    总结:

    1.PATH中如果增加点,那么执行命令时,操作系统会在当前目录下查找命令,如果点放到PATH的最前面,则会优先执行当前目录下的命令

    2.不要将脚本文件命令为与系统命令相同,不要去掉.sh后缀。坚持一些开发的基本原则,很多时候会避免很多不必要的麻烦。


    转载请注明出处:http://blog.csdn.net/u014569459/article/details/38564497

    
    
    
  • 相关阅读:
    Spring AOP入门基础-继承、装饰者,代理的选择
    Java Ajax入门
    Servlet Config和Context入门
    MapReduce的Shuffle理解
    Servlet Response常用方法
    Servlet Request常用方法
    HDFS中block设置128M的原因
    【Java】java获取json中某个字段
    【Java】字符串转json
    【Linux】shell脚本参数传递
  • 原文地址:https://www.cnblogs.com/jerry1999/p/4175917.html
Copyright © 2011-2022 走看看