Android 在bash脚本中监视Genymotion播放器进程
我需要从bash脚本启动一些Genymotion模拟器;这是我的剧本:Android 在bash脚本中监视Genymotion播放器进程,android,bash,shell,background-process,genymotion,Android,Bash,Shell,Background Process,Genymotion,我需要从bash脚本启动一些Genymotion模拟器;这是我的剧本: #!/bin/bash -x ######################### # Booting the emulators # ######################### #Wait for ADB to get reliable NUM_ELEM_ADB=$(adb devices -l | wc -l) ((NUM_ELEM_ADB-=2)) while [[ $NUM_ELEM_ADB -gt 0 ]
#!/bin/bash -x
#########################
# Booting the emulators #
#########################
#Wait for ADB to get reliable
NUM_ELEM_ADB=$(adb devices -l | wc -l)
((NUM_ELEM_ADB-=2))
while [[ $NUM_ELEM_ADB -gt 0 ]]; do
adb kill-server
adb start-server
NUM_ELEM_ADB=$(adb devices -l | wc -l)
((NUM_ELEM_ADB-=2))
done
#Retrieving all available emulators
EMULATORS=($(VBoxManage list vms | awk "{print \$NF}" | sed 's/[{, }]//g'))
#Boot EMULATORS[i]
for(( i= 0; i<${#EMULATORS[@]}; )) do
#echo "###Booting emulator: "${EMULATORS[i]}
/Applications/Genymotion.app/Contents/MacOS/player/ --vm-name ${EMULATORS[i]} &
NUM_ELEM_ADB=$(adb devices -l | wc -l)
((NUM_ELEM_ADB-=2))
((i++))
RESULT=$?
echo "###################Result: $RESULT"
#Wait for ADB to detect the started emulator
while [[ $NUM_ELEM_ADB -lt $i ]]; do
sleep 1
RESULT=$?
echo "###################Result: $RESULT"
#Here I should check if the emulator crashed or not
NUM_ELEM_ADB=$(adb devices -l | wc -l)
let "NUM_ELEM_ADB-=2"
done
((i++))
DEVICE=$(adb devices -l | awk "NR==$i{print \$1}")
COMMAND="adb -s $DEVICE shell getprop init.svc.bootanim"
#echo $COMMAND
OUT=`$COMMAND`
# Waiting for the emulator to fully boot
while [[ ${OUT:0:7} != 'stopped' ]]; do
#echo $COMMAND
OUT=`$COMMAND`
echo 'Waiting for emulator to fully boot...'
sleep 1
done
adb -s $DEVICE shell input keyevent 82
((i--))
done
exit 0
#/bin/bash-x
#########################
#启动模拟器#
#########################
#等待亚洲开发银行变得可靠
NUM_ELEM_ADB=$(ADB设备-l | wc-l)
((数字元素ADB-=2))
而[$NUM_ELEM_ADB-gt 0]];做
adb杀死服务器
adb启动服务器
NUM_ELEM_ADB=$(ADB设备-l | wc-l)
((数字元素ADB-=2))
完成
#正在检索所有可用的模拟器
模拟器=($(VBoxManage列表vms | awk“{print\$NF}”| sed的//[{,}]//g'))
#引导仿真器[i]
对于((i=0;i在((i++);RESULT=$?
之后,结果将显示i++的结果。在sleep 1;RESULT=$?
之后,结果将是sleep 1的结果。当您在后台启动模拟器时,可能需要一些时间才能检查错误(而不是下一行代码)。你能睡3秒钟并检查NUM_ELEM_ADB的值吗?嗯,是的,关于我正在做的$?值,我认为$?包含了最后一个后台进程的退出代码。有了睡眠,是的,它可能会工作,但我更愿意找到一种方法来准确地了解模拟器是否崩溃,而不是等待一段时间假设smth出错,因为在这段时间内模拟器应该已经启动。因为当我在后台启动播放器进程时,我也有带$的PID,有没有一种方法,给定一个PID,来理解进程的状态?有了ps,我没有发现任何有用的东西。我最好的办法是寻找一种程序可以运行的方式m在stdout/stderr上记录或写入,但我想您已经这样做了。也许会对您有所帮助,