Linux Shell脚本实现根据进程名杀死进程

起因

  为什么会写这篇文章呢,先说一下背景,因为一个生产环境的机器内存占用一直很高,经过排查发现是一个 consumer 的消费脚本中并发 http client 没有 close,导致定时每小时跑完的脚本一直在那里放着占用内存,时间久了内存占用就上来了,很快我就上了个 patch 修复了这个问题,但是那些跑完的脚本怎么处理呢?还用说嘛,当然要 kill 掉了。

脚本

手动每个去 kill 那真是太慢了,直接找个批量处理的脚本,将以下内容保存为 kill.sh,赋予执行权限,传入脚本的名称即可批量 kill 掉。

./kill.sh procedure_name
#!/bin/sh

if [ $# -lt 1 ]
then
  echo "缺少参数:procedure_name"
  exit 1
fi

PROCESS=`ps -ef|grep $1|grep -v grep|grep -v PPID|awk '{ print $2}'`
for i in $PROCESS
do
  echo "Kill the $1 process [ $i ]"
  kill -9 $i
done

一句话命令

感觉上面的脚本麻烦,可以直接使用下面的一句来实现。

ps -ef | grep procedure_name | grep -v grep | awk '{print $2}' | xargs kill -9

总结

杀掉脚本之后,内存立刻恢复正常占用,顿时感觉清爽了许多。

  1. 保证良好的编码习惯,一些资源用过之后及时 close。
  2. 定期查看生产环境的各种 logs,查找资料并解决报错,技术积累大部分来源于解决生产环境问题。

评论

  1. 1
    1

    555

    回复
  2. 1
    1

    1

    回复
  3. 1
    1

    555

    回复
    1. 1
      1

      1

      回复
  4. 1
    1

    1

    回复
    1. 1
      1

      1

      回复
    2. 1
      1

      1

      回复
    3. 1
      1

      1

      回复
    4. 1
      1

      1

      回复
    5. 1
      1

      1

      回复
    6. 1
      1

      1

      回复
    7. 1
      1

      1

      回复
  5. 1
    1

    1

    回复
    1. 1
      1

      1

      回复
    2. 1
      1

      1

      回复
    3. 1
      1

      1

      回复
    4. 1
      1

      1

      回复
    5. 1
      1

      1

      回复
    6. 1
      1

      1

      回复
    7. 1
      1

      1

      回复
    8. 1
      1

      1

      回复
    9. 1
      1

      1

      回复
    10. 1
      1

      1

      回复
    11. 1
      1

      1

      回复
    12. 1
      1

      1

      回复
    13. 1
      1

      1

      回复
    14. 1
      1

      1

      回复
    15. 1
      1

      1

      回复
    16. 1
      1

      1

      回复
    17. 1
      1

      1

      回复
    18. 1
      1

      1

      回复
    19. 1
      1

      1

      回复
  6. 1
    1

    555

    回复
  7. 1
    1

    1

    回复
    1. 1
      1

      1

      回复
    2. 1
      1

      1

      回复
    3. 1
      1

      1

      回复
    4. 1
      1

      1

      回复
    5. 1
      1

      1

      回复
    6. 1
      1

      1

      回复
    7. 1
      1

      1

      回复
    8. 1
      1

      1

      回复
    9. 1
      1

      1

      回复
    10. 1
      1

      1

      回复
    11. 1
      1

      1

      回复
    12. 1
      1

      1

      回复
    13. 1
      1

      1

      回复
    14. 1
      1

      1

      回复
    1. 1
      1

      555

      回复
    2. 1
      1

      1

      回复
    3. 1
      1

      1

      回复
    4. 1
      1

      1

      回复
    5. 1
      1

      1

      回复
    6. 1
      1

      1

      回复
    7. 1
      1

      1

      回复
    8. 1
      1

      1

      回复
    9. 1
      1

      1

      回复
      1. 1
        1

        1

        回复
      2. 1
        1

        1

        回复
      3. 1
        1

        1

        回复
      4. 1
        1

        1

        回复
      5. 1
        1

        1

        回复
      6. 1
        1

        1

        回复
      7. 1
        1

        1

        回复
      8. 1
        1

        1

        回复
      9. 1
        1

        1

        回复
      10. 1
        1

        1

        回复
      11. 1
        1

        1

        回复
      12. 1
        1

        1

        回复
      13. 1
        1

        1

        回复
      14. 1
        1

        1

        回复
      15. 1
        1

        1

        回复
      16. 1
        1

        1

        回复
      17. 1
        1

        1

        回复
      18. 1
        1

        1

        回复