我编写了 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
关于linux - 如何在 shell 脚本运行时启用某些命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27145164/