我已经编写了1个Shell脚本来为特定的进程ID(PID)运行Jstack命令。

但是有时可能会在服务器中为Java进程提供多个PID。

在那种情况下,我想运行那么多的Jstack命令,将各自的PID作为命令的输入。

例如。如果一个应用程序有2个服务器(1个tomcat和1个jboss),那么我需要运行2个JStack命令来为2个进程捕获2个不同的日志。

那么,如何处理或检查脚本以自动确定Java进程中有多少个PID,并运行脚本中编写的命令?

我的脚本正在通过以下方式激活所有PID

PID1=$(ps -ef|grep java|grep jboss| awk '{print $2}' )




PID2=$(ps -ef|grep java|grep tomcat| awk '{print $2}' )


之后,我正在运行Jstack命令

jstack $PID1 > jStack1.txt & and jstack $PID2 > jStack2.txt &

最佳答案

要获取pid,您可以使用pgrep代替ps/grep/grep/awk

for pid in $(pgrep -f "tomcat|jboss")
do
  jstack $pid >> jStack1.txt
done

10-01 19:37