免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 4416 | 回复: 23
打印 上一主题 下一主题

[系统管理] 关于bash代码传参的问题 [复制链接]

论坛徽章:
1
天蝎座
日期:2013-10-05 22:53:35
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-06-22 14:44 |只看该作者 |倒序浏览
本帖最后由 jiaxinhuayuan 于 2016-06-22 14:45 编辑

想写一个shell脚本自动杀掉tomcat进程,使用了下面代码:
pid=`ps aux|grep $1|grep -v "grep"|awk '{print $2}'`
kill -9 $pid
其中$1是传入的tomcat进程关键字,发现$1可以传入,但是pid获取有错,求助这样的需求应该如何实现?
需求:tomcat进程名是传入的,不可能写死,根据这个杀掉对应的进程。谢谢各位!

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
2 [报告]
发表于 2016-06-22 15:01 |只看该作者
ps aux|grep $1|grep -v "grep"
ps aux|grep $1|grep -v "grep"|awk '{print $2}'
把这两个命令的结果分别发出来,看看是哪一步出问题了。

论坛徽章:
2
luobin
日期:2016-06-17 17:46:36lufei
日期:2016-06-17 17:49:16
3 [报告]
发表于 2016-06-22 15:11 |只看该作者
$1是外部传入的?不需要吧,你直接抓tomcat进程,然后取pid不行吗?

论坛徽章:
1
天蝎座
日期:2013-10-05 22:53:35
4 [报告]
发表于 2016-06-22 15:17 |只看该作者
脚本是这样写的:
#/bin/bash
echo $1
pid=`ps aux|grep $1|grep -v "grep"|awk '{print $2}'`
echo $pid
kill -9 $pid
命令执行是:bash -x test.sh tomcat
结果是:
+ echo tomcat
tomcat
++ ps aux
++ grep tomcat
++ grep -v grep
++ awk '{print $2}'
+ pid='23180
23069
23181'
+ echo 23180 23069 23181
23180 23069 23181
+ kill -9 23180 23069 23181
Killed: 9

如果换成:ps aux|grep $1|grep -v "grep"的话结果是这样的:
+ echo tomcat
tomcat
++ ps aux
++ grep tomcat
++ grep -v grep
pid='***           23189   0.0  0.0  2443624    520 s003  S+    3:14下午   0:00.00 bash -x test.sh tomcat
之类的,后面还有很多。
PS:如果不传参数,直接在终端执行ps aux |grep "tomcat" |grep -v "grep" |awk '{print $2}'是可以的。
求解
回复 2# Shell_HAT


   

论坛徽章:
1
天蝎座
日期:2013-10-05 22:53:35
5 [报告]
发表于 2016-06-22 15:19 |只看该作者
这样的话可能有多个tomcat进程了,会误杀掉别的,我需要只杀掉我想杀的,比如"tomcat-ship"这样就只有一个了回复 3# hz_oracle


   

论坛徽章:
1
天蝎座
日期:2013-10-05 22:53:35
6 [报告]
发表于 2016-06-22 15:20 |只看该作者
所以需要外部传入的回复 3# hz_oracle


   

论坛徽章:
2
luobin
日期:2016-06-17 17:46:36lufei
日期:2016-06-17 17:49:16
7 [报告]
发表于 2016-06-22 15:26 |只看该作者
回复 5# jiaxinhuayuan


    那是你定位不准确啊。你要杀掉tomcat-ship为啥传参数传的是tomcat?

论坛徽章:
1
天蝎座
日期:2013-10-05 22:53:35
8 [报告]
发表于 2016-06-22 15:27 |只看该作者
我是举个例子,实际上我传tomcat这个参数已经唯一确定了回复 7# hz_oracle


   

论坛徽章:
1
天蝎座
日期:2013-10-05 22:53:35
9 [报告]
发表于 2016-06-22 15:28 |只看该作者
但有的时候当然不是喽,所以这个地方需要外部传入,保证唯一性回复 7# hz_oracle


   

论坛徽章:
2
luobin
日期:2016-06-17 17:46:36lufei
日期:2016-06-17 17:49:16
10 [报告]
发表于 2016-06-22 15:31 |只看该作者
回复 9# jiaxinhuayuan


    不清楚你想表达什么意思。 你要kill掉tomcat-ship 那传入参数就写tomcat-ship啊。。否则你怎么保证抓到的pid唯一性?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP