Я должен выполнить процесс, который иногда выдает ошибку. Однако каждый раз, когда он выдает эту ошибку, он не выходит из процесса.
aneesh@nb-14:~$ emulator -no-boot-anim -avd Andreud
Emulator ERROR: Unable to load VM from snapshot. The snapshot file was saved for a
different hardware configuration
^Z
aneesh@nb-14:~$ emulator -no-boot-anim -avd Andreud
В случае успеха курсор находится в начале второй строки выше, и ошибка эмулятора не отображается. При неудаче он показывает ошибку, но я вынужден ее остановить. Команды могут показывать, что этот вопрос не по теме.
Однако мой вопрос заключается в том, как (с помощью команды) обнаружить эту ошибку, пока этот процесс еще выполняется, и, если да, убить ее.
Запустите эмулятор в фоновом режиме, отправив весь его вывод во временный файл
emulator -no-boot-anim -avd Andreud &>/tmp/emulator-output &
Затем получите PID недавно запущенного процесса и сохраните его в переменной EMULATORPID
[ 111]Затем, пока эмулятор еще работает, просмотрите выходной файл на наличие ошибки, а когда он найден, завершите процесс с помощью PID:
while ps -p$EMULATORPID ; do
grep "Emulator ERROR" /tmp/emulator-output && kill $EMULATORPID
done
Чтобы удовлетворить дополнительное требование выхода в цикле while через пять секунд вы можете установить счетчик, увеличивать его каждый цикл и добавлять задержку в один раздел для каждой итерации следующим образом:
CTR=0
while ps -p$EMULATORPID && [ $CTR -lt 5 ] ; do
grep "Emulator ERROR" /tmp/emulator-output && kill $EMULATORPID
sleep 1s;
CTR=$[CTR+1]
done