linux - 如何在 shell 脚本运行时启用某些命令

标签 linux bash shell awk

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

相关文章:

linux - 查找一个字符串并添加之前保存在变量中的多行字符串

arrays - 使用文件输入运行并行命令的 Bash 脚本

linux - 如何在 shell 中创建一个包含多列的循环?

linux - Shell 脚本,回显消息后在同一行读取

python - 如果文件在两台机器中都丢失,如何以非零状态退出 shell 脚本?

linux - 作为对在 Fedora linux 中加载程序的响应,killed 是什么意思?

linux - x86_64 Linux 3.0 : Invalid Memory Addresses

perl - 从 Perl 或 shell 中的颠覆转储文件中获取最高修订号

linux - Shell:目录中的/和//有区别吗?

linux - 使用 awk/sed 在制表符分隔文件中间添加重复内容