SHELL脚本问题,百思不得其解

倚小丁 发布于 2015/06/27 11:36
阅读 241
收藏 0

在shell 中,如果直接执行以下过程,会得到一个进程ID 也就是tomcat的ID

JOB='tomcat'

SH_PID=`ps -ef|grep "$JOB"|grep -v "grep"|awk '{print $2}'`

#得出结果为 一个ID 1019

但是如果我把他放到shell脚本中,如tomcat_supvisor_wrapper.sh中

同样的,会得到三个ID,如 1019 2231 8233 ,经查,后面两个都是不存在的。可能执行的时候才会有。

虽然,可以再继续通过awk 进行筛选以达到同样的结果。但是,仍然不知为什么?

加载中
0
crazyvv
crazyvv
或者grep -v "tomcat_supvisor_wrapper"
0
茗迹周

tomcat有个pid输出文件,你可以获取pid然后grep pid

PID=`cat /var/lib/tomcat/pid`

SH_PID=`ps -ef|grep "$JOB"|grep "PID"|grep -v "grep"|awk '{print $2}'`

之所以出现三个是因为在执行脚本的时候会调用ps -ef命令产生子进程,你是匹配jobname,试试grep pid吧

倚小丁
倚小丁
你好,我并不是要知道tomcat的PID 。我是不明白 这个是为啥
0
化境
化境

你可以通过修改tomcat环境变量“CATALINA-PID" 来确定pid文件的位置及其名称 然后直接读取这个文件里的pid号就ok

另外你可以通过端口号来获得 :比如 已知tomcat http 端口号为8080, 用命令: lsof -i :8080|tail -n 1 |awk '{print $2}'   这样你就能得到pid 

倚小丁
倚小丁
我并不是要知道 他的PID 我只是想知道 他是为啥的
0
GW-2017
GW-2017
shell脚本名称里面有tomcat了。改改试试。
0
定期马甲
定期马甲

测试了下,没有发现有多个pid。

有没有可能运程了多个tomcat,或者其他程序命令行中有tomcat字符。

0
马博文
马博文

可以把那个id相关的进程打印出来看看是什么。

0
crazyvv
crazyvv
把你的脚本名tomcat_supvisor_wrapper.sh  换成  shit_supvisor_wrapper.sh
0
cherrypp
cherrypp

在管道里过滤tomcat_supvisor_wrapper

grep -v "tomcat_supvisor_wrapper"

倚小丁
倚小丁
正解。 可是我设置了最佳答案了
返回顶部
顶部