如何通过完全匹配jar包名获取到PID?

原因:项目的jar名存在部分相同的情况
[root@ecs jar]# ll *.jar
-rw-r--r-- 1 root root  53569099 Nov  2 15:10 config-server-1.0.jar
-rw-r--r-- 1 thtf thtf  51950677 Aug  4  2021 eureka-server-1.0.jar
-rw-r--r-- 1 root root 131810311 Oct  8 15:48 server-1.0.jar
在通过下面命令获取server-1.0.jar的pid时,因为jar包名的原因竟然得到了三个值
[root@ecs jar]# ps -ef |grep server-1.0.jar |grep -v grep|awk '{print $2}'
3269
4356
14307

通过jar包名无法准确获取到pid,导致编写的脚本无法执行~

请教大家如何才能在不修改jar包名的情况下,获取到 server-1.0.jar的正确pid呢?

用双引号把搜索字符串括起来,搜索带空格的即可

ps -ef |grep " server-1.0.jar"

这个很好解决,grep -w 是全词匹配的意思。所以加个-w选项就OK了。

ps -ef |grep -w "server-1.0.jar" |grep -v "grep"| awk '{print $2}'

这种启动时没带完整路径,只能根据pid的jar包的启动路径来区分,这个就是显示pid 3269的启动路径方法:cat /proc/3269/cwd