Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在bash脚本中监视Genymotion播放器进程_Android_Bash_Shell_Background Process_Genymotion - Fatal编程技术网

Android 在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 ]

我需要从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 ]]; 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上记录或写入,但我想您已经这样做了。也许会对您有所帮助,