【发布时间】:2014-11-28 23:20:56
【问题描述】:
我已经编写了 1 个 shell 脚本来为特定的进程 ID (PID) 运行 Jstack 命令。
但有时可能会出现多个 PID 存在于 Java 进程的服务器中。
在这种情况下,我想运行许多 Jstack 命令,将各自的 PID 作为命令的输入。
例如。如果一个应用程序有 2 个服务器(1 个 tomcat 和 1 个 jboss),那么我需要运行 2 个 JStack 命令来为 2 个进程捕获 2 个不同的日志。
那么如何处理或检查,以便脚本自动决定有多少个 PID 用于 java 进程并运行脚本中编写的命令?
我的脚本正在获取所有激活的 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 &
【问题讨论】:
-
你的问题是什么?
-
上述命令有什么问题?目前还不是很清楚你的期望是什么。如果您能用示例输入解释当前的情况以及您对输出的期望会有所帮助。
-
我希望脚本检测 tomcat 和 jboss 有多少进程 ID,因此应该运行 jstack 命令。例如如果只有 PID1,那么 jstack $PID1 > jStack1.txt & 应该运行。如果 PID1 和 PID2 都存在,则 jstack $PID1 > jStack1.txt & 应该为 PID1 运行,而 jstack $PID2 > jStack2.txt & 应该为 PID2 运行。