我有一个要执行的进程,有时会产生错误。但是每次产生该错误时,它都不会退出该进程。
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
成功时,光标位于上面第二行的开头,并且不会显示模拟器错误。失败时会显示错误,但我被迫停止它。这些命令似乎表明这个问题是题外话。
然而我的问题是如何(通过命令)在该进程仍在运行时检测此错误,如果是,则终止它。
答案1
在后台启动模拟器,并将其所有输出发送到临时文件
emulator -no-boot-anim -avd Andreud &>/tmp/emulator-output &
然后获取最近启动的进程的 PID,并将其存储在名为 EMULATORPID 的变量中
EMULATORPID=$!
然后,当模拟器仍在运行时,观察输出文件中的错误,当发现错误时,通过 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