获取linux服务进程号
ps -ef | grep "服务名" | grep -v "grep" | awk '{print $2}'
举个例子
[root@bd1 ~]# ps -ef|grep kk
root 972997 692368 0 09:41 pts/4 00:00:00 grep --color=auto kk
[root@bd1 ~]# ps -ef|grep data
root 458995 458974 0 10月27 ? 00:04:26 java -jar /app/test-api.jar
root 1011108 692368 0 09:44 pts/4 00:00:00 grep --color=auto data
不管管道(grep)查询的是什么,都会查出来相关的的结果,其实默认结果就是该命令本身触发的pid.这个是需要过滤掉的。
# ps -ef|grep "被查询的服务名" 查询服务进程号命令
# grep -v grep 在文档中过滤掉包含有grep字符的行
# awk '{print $2}' 一行一行的读取指定的文件, 以空格作为分隔符,打印第二个字段。
示例如下:
[root@zzjjj app]$ ps -ef | grep tomcat|grep /app/upay/apps/xcharge-simulator_01/bin | grep -v grep\
upay 16675 1 0 14:07 pts/1 00:00:46 /opt/app/xcharge/jdk/jdk1.7.0_67/bin/java -Djava.util.logging.config.file=/app/upay/apps/xcharge-simulator_01/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.endorsed.dirs=/app/upay/apps/xcharge-simulator_01/endorsed -classpath /app/upay/apps/xcharge-simulator_01/bin/bootstrap.jar:/app/upay/apps/xcharge-simulator_01/bin/tomcat-juli.jar -Dcatalina.base=/app/upay/apps/xcharge-simulator_01 -Dcatalina.home=/app/upay/apps/xcharge-simulator_01 -Djava.io.tmpdir=/app/upay/apps/xcharge-simulator_01/temp org.apache.catalina.startup.Bootstrap start\
[upay@jy-cash03 app]$\
[upay@jy-cash03 app]$\
[upay@jy-cash03 app]$ ps -ef | grep tomcat|grep /app/upay/apps/xcharge-simulator_01/bin | grep -v grep|awk '{print $2}'\
16675
今天,写脚本的时候,有这么一个需求,先查询进程号,然后再kill掉进程,不过该过程要通过脚本实现。
一般来说,直接用Linux命令,可以这样
先使用 ps -ef|grep tomcat 查询出进程号,然后,在用kill -9 进程号 , kill掉进程,但是,这是手工输得,程序不能手工输入呀,所以,我百度了下,发现还真的有一句命令可以实现的,分为两种, 一个是可以直接在Linux命令行中输入的,另一种是在shell脚本中实现的,都好使,根据情况使用
- Linux 命令行
#####查找tomcat进程
ps -ef | grep tomcat | grep -v grep | awk '{print $2}'
#####查找tomcat进程并杀死
ps -ef | grep tomcat | grep -v grep | awk '{print $2}' | xargs kill -9
2.shell 脚本
echo "开始查询DSP2.0运行的进程编号,查出将其kill"
dsp_admin_id=ps -ef | grep dsp-admin | grep -v "grep" | awk '{print $2}'
echo $dsp_admin_id
for id in id
echo "killed $id"
done