经常需要杀死某个进程,操作了几次之后,对一个熟练的码农来说,就要制作自己的工具了。有些工具虽然很小,但是却能节省一大部分的时间。

输入某个进程的ID并杀死的方法。这种事情,一般是先搜索再进行优化,这种对我这种不是大牛的人来说,是最快的方法:

果然不出所料,很快我就找到一个能用的脚本:

#!/bin/bash
echo "Input process name first"
read input1 PID=$(ps -e|grep $input1|awk '{printf $1}') if [ $? -eq ]; then
echo "process id:$PID"
else
echo "process $input1 not exit"
exit
fi kill - ${PID} if [ $? -eq ];then
echo "kill $input1 success"
else
echo "kill $input1 fail"
fi

可是,运行了几次之后,我发现了一个问题,就是这个脚本会把自己删除PID的线程也删掉,这种是删不掉的,所以总会报错。

找了一些资料,才发现里面有个问题需要解决:就是需要忽略当前的脚本即可:

pid=`ps -ef | grep "$filename" | grep -v "cgroup" | grep -v "grep" | awk '{print $2}'`

接下来,把这个脚本改成这样就很完美了:

#!/bin/bash
#echo "Input process name first"
#read input1 PID=`ps -ef | grep "arm-none-eabi-gdb" | grep -v "cgroup" | grep -v "grep" | awk '{print $2}'` if [ $? -eq ]; then
echo "process id:$PID"
else
echo "process $input1 not exit"
exit
fi kill - ${PID} if [ $? -eq ];then
echo "kill $input1 success"
else
echo "kill $input1 fail"
fi

顺便说明一下,grep -v 这个命令要好好用,以前用的太少了。也许,下面的这个例子能够清楚的给出这个关键字的含义和用法:

➜  scripts git:(master) ✗ ps -ef | grep "kill_gdb"
:30下午 ttys003 :00.00 sh kill_gdb.sh
:33下午 ttys003 :00.01 vim kill_gdb.sh
:38下午 ttys003 :00.02 vim kill_gdb.sh
:39下午 ttys003 :00.01 vim kill_gdb.sh
:40下午 ttys003 :00.01 vim kill_gdb.sh
:02下午 ttys003 :00.02 vim kill_gdb.sh
:04下午 ttys003 :00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn kill_gdb
➜ scripts git:(master) ✗ ps -ef | grep "kill_gdb" | grep -v "grep"
:30下午 ttys003 :00.00 sh kill_gdb.sh
:33下午 ttys003 :00.01 vim kill_gdb.sh
:38下午 ttys003 :00.02 vim kill_gdb.sh
:39下午 ttys003 :00.01 vim kill_gdb.sh
:40下午 ttys003 :00.01 vim kill_gdb.sh
:02下午 ttys003 :00.02 vim kill_gdb.sh

shell脚本获取进程ID并杀死的实现及问题解析的更多相关文章

  1. 014-交互式Shell和shell脚本获取进程 pid

    Linux 的交互式 Shell 与 Shell 脚本存在一定的差异,主要是由于后者存在一个独立的运行进程 1.交互式 Bash Shell 获取进程 pid 在已知进程名(name)的前提下,交互式 ...

  2. shell脚本获取mysql插入数据自增长id的值

    shell脚本获取mysql插入数据自增长id的值 在shell脚本中我们可以通过last_insert_id()获取id值,但是,需要注意的是,该函数必须在执行插入操作的sql语句之后,立即调用,否 ...

  3. 用shell脚本监控进程是否存在 不存在则启动的实例

    用shell脚本监控进程是否存在 不存在则启动的实例,先上代码干货: #!/bin/shps -fe|grep processString |grep -v grepif [ $? -ne 0 ]th ...

  4. linux shell脚本监控进程是否存在

    用shell脚本监控进程是否存在 不存在则启动的实例,先上代码干货:    #!/bin/shps -fe|grep processString |grep -v grepif [ $? -ne 0 ...

  5. 在 shell 脚本获取 ip、数字转换等网络操作

    在 shell 脚本获取 ip.数字转换等网络操作 ip 和数字的相互转换 ip转换为数字 :: function ip2num() { local ip=$1 local a=$(echo $ip ...

  6. 如何通过进程名获取进程ID

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:如何通过进程名获取进程ID.

  7. linux与windows查看占用端口的进程ID并杀死进程

    有时候tomcat出现端口被占用,需要查出进程ID并杀死进程. 1.查找占用端口的进程ID(windows与linux一样  8005也可以加上引号   grep可以用findstr替换) 6904就 ...

  8. 关于使用java执行shell脚本获取centos的硬盘序列号和mac地址

    1.获取硬盘序列号: 新建shell脚本文件: identifier.sh, 内容为: diskdata=`fdisk -l` diskleft=${diskdata#*"identifie ...

  9. python获取进程id号:

    python获取进程id号: os.getpid()获取当前进程id os.getppid()获取父进程id

随机推荐

  1. k8s 各种网络方案 - 每天5分钟玩转 Docker 容器技术(170)

    网络模型有了,如何实现呢? 为了保证网络方案的标准化.扩展性和灵活性,Kubernetes 采用了 Container Networking Interface(CNI)规范. CNI 是由 Core ...

  2. 一个js小游戏----总结

    花了大概一天左右的功夫实现了一个js小游戏的基本功能,类似于“雷电”那样的小游戏,实现了随即怪物发生器,碰撞检测,运动等等都实现了,下一个功能是子弹轨迹,还有其他一些扩展功能,没有用库,也没有用web ...

  3. APNs 推送原理及问题

    http://bbs.csdn.net/topics/390461996 在 iOS 平台上,大部分应用是不允许在后台运行并连接网络的.在应用没有被运行的时候,只能通过 Apple Push Noti ...

  4. 23.app后端如何架设文件系统

    现在app展现内容的形式多种多样的,有文字,图片,声音,视频等等,其中文件占了一个很大的比重.随着app不断运营,文件会越来越多,占用的磁盘空间也不断增大,架设一套高效的文件系统,对于整个app架构有 ...

  5. 8.app后端和web后端的区别

    很多从web后端转到app后端的小伙伴经常很茫然,不知道这两者之间有啥区别.本文通过例子,分析web后端和app后端的区别,使各位更好地把握app后端的架构. (1) app后端要慎重考虑网络传输的流 ...

  6. app后端设计(13)--IM4JAVA+GraphicsMagick实现中文水印

    在app的后台中,有时候为了标示版权,需要给图片加上水印. 在liunx中,IM4JAVA+GraphicsMagick是个高效处理图片的方案,图片的裁剪是使用了这个技术方案,为了减少不必要的开发成本 ...

  7. Java Script 学习笔记 (一) 基础

    1. 设置变量 const: 赋常量,不可更改. let :设置可更改变量. ES6 中推荐使用let 而不是var. Let 和var的区别 : let 将变量的作用域限定在当前{}中, var 定 ...

  8. Java设计模式之《适配器模式》及应用场景

    转自https://www.cnblogs.com/V1haoge/p/6479118.html 适配器就是一种适配中间件,它存在于不匹配的二者之间,用于连接二者,将不匹配变得匹配,简单点理解就是平常 ...

  9. SPU和SKU有什么区别

    SPU = Standard Product Unit (标准产品单位)SPU是商品信息聚合的最小单位,是一组可复用.易检索的标准化信息的集合,该集合描述了一个产品的特性.通俗点讲,属性值.特性相同的 ...

  10. uuid.go

    package uuid import "time" func GenerateUUID() uint64 {     return uint64(time.Now().UnixN ...