检测正在运行的进程的错误?

检测正在运行的进程的错误?

我有一个要执行的进程,有时会产生错误。但是每次产生该错误时,它都不会退出该进程。

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

相关内容