Linux Shell中获取进程号的方法
问题描述:公司有一款产品openfire部署在客户的服务器上,里面的人员是由别的公司通过webservice推送过来的,但是由于openfire的缓存机制,每次往数据库里添加新人或者更改某些人的属性时,如果不重新启动一次openfire,则效果和没有更改数据库一样。所以就要求必须重新启动openfire。在此还有一个问题,openfire是通过双机热备机制部署在服务器上,所以如果只是简单的kill掉openfire进程,那么双机热备软件由于检测到不足数量的Java进程就会进行切换。所以在kill掉openfire之前应该,启动一个java进程,当openfire启动后在stop这个java进程。而客户的意见是:运行一个shell脚本就能把这些事情都搞定。
解决方法:通过ps -Af|grep openfire 能够得到openfire进程的进程号(openfire没有stop的shell,真是蹩脚)
而在shell 脚本里很难通过 ps -Af|grep openfire 得到正在运行的openfire进程号,在网上找了好久也没有发现有一个好的办法,仔细想想在每次启动openfire时可以得进程号,然后把进程号写入一个文件中,当想要kill掉openfire进程时 先读取文件得到进程号 然后再kill 掉
所以代码分两步:第一步 修改openfire.sh(openfire的启动文件) 在开始地方 加入:echo $$>shuanglengfeng.pid 就会把进程号 写入shuanglengfeng.pid文件中。
第二步 获取shuanglengfeng.pid中进程号
#!/bin/bash
cat shuanglengfeng.pid | while read line
do
echo $line
done
shell大致结构如此,这样就可以满足要求了。