shell脚本获取进程ID并杀死的实现及问题解析
经常需要杀死某个进程,操作了几次之后,对一个熟练的码农来说,就要制作自己的工具了。有些工具虽然很小,但是却能节省一大部分的时间。
输入某个进程的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并杀死的实现及问题解析的更多相关文章
- 014-交互式Shell和shell脚本获取进程 pid
Linux 的交互式 Shell 与 Shell 脚本存在一定的差异,主要是由于后者存在一个独立的运行进程 1.交互式 Bash Shell 获取进程 pid 在已知进程名(name)的前提下,交互式 ...
- shell脚本获取mysql插入数据自增长id的值
shell脚本获取mysql插入数据自增长id的值 在shell脚本中我们可以通过last_insert_id()获取id值,但是,需要注意的是,该函数必须在执行插入操作的sql语句之后,立即调用,否 ...
- 用shell脚本监控进程是否存在 不存在则启动的实例
用shell脚本监控进程是否存在 不存在则启动的实例,先上代码干货: #!/bin/shps -fe|grep processString |grep -v grepif [ $? -ne 0 ]th ...
- linux shell脚本监控进程是否存在
用shell脚本监控进程是否存在 不存在则启动的实例,先上代码干货: #!/bin/shps -fe|grep processString |grep -v grepif [ $? -ne 0 ...
- 在 shell 脚本获取 ip、数字转换等网络操作
在 shell 脚本获取 ip.数字转换等网络操作 ip 和数字的相互转换 ip转换为数字 :: function ip2num() { local ip=$1 local a=$(echo $ip ...
- 如何通过进程名获取进程ID
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:如何通过进程名获取进程ID.
- linux与windows查看占用端口的进程ID并杀死进程
有时候tomcat出现端口被占用,需要查出进程ID并杀死进程. 1.查找占用端口的进程ID(windows与linux一样 8005也可以加上引号 grep可以用findstr替换) 6904就 ...
- 关于使用java执行shell脚本获取centos的硬盘序列号和mac地址
1.获取硬盘序列号: 新建shell脚本文件: identifier.sh, 内容为: diskdata=`fdisk -l` diskleft=${diskdata#*"identifie ...
- python获取进程id号:
python获取进程id号: os.getpid()获取当前进程id os.getppid()获取父进程id
随机推荐
- LoadRunner Mysql性能优化
原文:https://blog.csdn.net/u011910905/article/details/49863787 一.查询与索引优化分析 1.show命令: show engines; 显示存 ...
- 在Ubuntu16.04上配置.Net Core 2 环境
一.安装.Net Core SDK 按照官方文档,执行以下命令安装SDK curl https://packages.microsoft.com/keys/microsoft.asc | gpg -- ...
- jQuery学习之旅 Item9 动画效果
1.元素的显示和隐藏 display:none; 隐藏 display:block; 显示 简单显示和隐藏方法 a) show() 显示 b) hide() 隐藏 c) toggle() 开关,显示则 ...
- 解决mongodb的安装mongod命令不是内部或外部命令
1:安装 去mongodb的官网http://www.mongodb.org/downloads下载32bit的包 解压后会出现以下文件 在安装的盘C:下建立mongodb文件夹,拷贝bin文件夹到该 ...
- (二)Maven的安装与环境配置
主要内容 在Windows上安装Maven 安装目录分析 在Windows上安装Maven 本机环境:Windows10,JDK9.0.4. 想要安装Maven,需要下载Maven的zip文件,并将其 ...
- ps技术--批量给图片加水印
在日常的办公过程中,对于一些比较重要的文件的扫描件需要特殊处理,这时我们就需要给它们加上水印,保证它们的用途唯一,而这些扫描件很多,不可能一一给他们加水印,所以为提高工作效率,我们就可以使用一些小软件 ...
- 【bzoj 3233】[Ahoi2013]找硬币 ——搜索
Description 小蛇是金融部部长.最近她决定制造一系列新的货币.假设她要制造的货币的面值为x1,x2,x3… 那么x1必须为1,xb必须为xa的正整数倍(b>a).例如 1,5,125, ...
- Nginx重新编译添加新模块
找到nginx的安装包目录,如果没有的话去官网重新下载 查看ngixn版本极其编译参数 /usr/local/nginx/sbin/nginx -V 进入nginx源码目录,重新设置nginx ./c ...
- Maven安装教程详解
一.准备工作 1.确定电脑上已经成功安装jdk7.0以上版本 2.win10操作系统 3.maven安装包 下载地 ...
- (转载)CSS3与页面布局学习总结(三)——BFC、定位、浮动、7种垂直居中方法
目录 一.BFC与IFC 1.1.BFC与IFC概要 1.2.如何产生BFC 1.3.BFC的作用与特点 二.定位 2.2.relative 2.3.absolute 2.4.fixed 2.5.z- ...