用于转储 Android 设备上的多个进程的 Bash 脚本

用于转储 Android 设备上的多个进程的 Bash 脚本

我创建了三个 bash 脚本,用于转储 Android 设备中运行的几个进程。第一个 bash 脚本:

#!/bin/bash

echo "adb forward tcp:8888 tcp:8888"
adb forward tcp:8888 tcp:8888

exec $SHELL 

第二个 bash 脚本:

#!/bin/bash

echo "acquire the process with mem tool"
adb shell "
/dev/examiner/mem 797 | /dev/examiner/nc -l -p 8888
"

exec $SHELL

第三个脚本:

#!/bin/bash

echo "dump the selected process"
nc 127.0.0.1 8888 > ~/work_folder/bin/797_surface_flinger.bin

exec $SHELL

例如,我有 3 个正在运行的进程:PID 797、PID 1025 和 PID 2020,我想转储它们。有什么办法可以改进第二个和第三个脚本,而无需手动更改所选 PID 编号以转储其他选定的进程?

答案1

您可以让每个脚本接受 2 个参数,即要使用的端口和要使用的 pid。然后使用不同的端口和 pid 运行它们。例如,如果调用第一个脚本,script1那么您可以运行

script1 8888 797
script1 8887 1025
script1 8886 2020

以下是使用 2 个参数的脚本。

#!/bin/bash
port=${1?} pid=${2?}
echo "adb forward tcp:$port tcp:$port"
adb forward tcp:$port tcp:$port


#!/bin/bash
port=${1?} pid=${2?}
echo "acquire the process with mem tool"
adb shell "
/dev/examiner/mem $pid | /dev/examiner/nc -l -p $port
"


#!/bin/bash
port=${1?} pid=${2?}
echo "dump the selected process"
nc 127.0.0.1 $port > ~/work_folder/bin/${pid}_surface_flinger.bin

exec $SHELL我不知道为什么每个脚本末尾都有这个。你确定需要它吗?

相关内容