shell脚本实现循环抓取多个进程id的pstack日志
时间: 2023-07-12 17:04:43 浏览: 189
以下是一个简单的 shell 脚本,用于循环抓取多个进程 ID 的 pstack 日志:
```bash
#!/bin/bash
# 定义进程 ID 列表
pid_list="1234 5678 9012"
# 循环遍历进程 ID 列表
for pid in $pid_list; do
# 生成 pstack 日志文件名
pstack_file="pstack_${pid}.log"
# 抓取进程的 pstack 日志
pstack $pid > $pstack_file
echo "Generated pstack log for process $pid: $pstack_file"
done
```
在上面的脚本中,我们首先定义了一个进程 ID 列表 `pid_list`,包含了我们要抓取 pstack 日志的多个进程 ID。然后,我们使用一个 `for` 循环遍历这个列表,对于每个进程 ID,我们都生成一个对应的 pstack 日志文件名,并使用 `pstack` 命令抓取该进程的 pstack 日志,并将其输出到对应的文件中。
最后,我们输出一条消息,指示我们已经生成了该进程的 pstack 日志文件。你可以根据自己的需求修改此脚本,例如更改进程 ID 列表或生成的日志文件名等。
相关问题
shell脚本实现循环抓取多个进程id的pstack日志,并且在每次向日志里输入pstack命令执行时的当前时间
可以使用一个循环来遍历所有需要抓取pstack日志的进程id,并在每次执行pstack命令时记录当前时间。具体的脚本如下:
```shell
#!/bin/bash
# 定义需要抓取pstack日志的进程id数组
pid_array=(1234 5678 91011)
# 循环遍历进程id数组
for pid in "${pid_array[@]}"
do
# 获取当前时间
current_time=$(date +"%Y-%m-%d %H:%M:%S")
# 执行pstack命令并将结果输出到日志文件
pstack $pid >> pstack.log
# 在日志文件中记录执行pstack命令时的当前时间
echo "[$current_time] pstack $pid" >> pstack.log
done
```
在上面的脚本中,我们首先定义了一个需要抓取pstack日志的进程id数组,然后使用一个for循环来遍历数组中的每个进程id。在循环体内,我们使用date命令获取当前时间,并使用pstack命令抓取当前进程id的堆栈信息,并将结果输出到pstack.log文件中。最后,在日志文件中记录执行pstack命令时的当前时间。
使用这个脚本,您可以抓取多个进程id的pstack日志,并在日志文件中记录每次执行pstack命令时的当前时间。
shell脚本实现循环抓取某个程序的pstack日志,这个程序有名字相同的多个进程id。并且在每次向日志里输入pstack命令执行时的当前时间,当程序的某个进程id变更时,停止脚本。并打印变更的进程id.
可以使用`ps`命令来获取程序相同的多个进程id,然后在循环中对每个进程id执行pstack命令。实现如下:
```shell
#!/bin/bash
# 程序名
program_name="your_program_name"
# 当前进程id
current_pid=""
# 循环抓取pstack日志
while true; do
# 获取程序相同的多个进程id
pids=$(ps -ef | grep "${program_name}" | grep -v grep | awk '{print $2}')
# 判断当前进程id是否变更
if [[ "${pids}" != *"${current_pid}"* ]]; then
# 打印变更的进程id
echo "Process ID changed: ${current_pid} -> ${pids}"
break
fi
# 记录当前进程id
current_pid="${pids}"
# 执行pstack命令并输出到日志文件中
echo "[$(date)] pstack ${pids}" >> pstack.log
pstack ${pids} >> pstack.log
# 等待5秒后继续循环
sleep 5
done
```
在上面的脚本中,我们使用了`ps`命令来获取程序相同的多个进程id,并通过变量`current_pid`来记录当前进程id。在每次循环中,我们判断当前进程id是否变更,如果变更了就停止脚本并打印变更的进程id。同时,在向日志文件中记录pstack命令执行的时间和结果后,我们使用`sleep`命令来等待5秒继续循环。
阅读全文