我已经编写了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