【发布时间】:2019-11-19 16:10:39
【问题描述】:
我需要通过adb exec-out在android设备上运行一些代码,但是当主要代码完成时(包括断开的USB、杀死的adb等),它也需要在设备上执行一个重要的清理代码。
我的想法是推送并运行类似的东西:
#!/bin/sh
cleanup() {
trap - INT TERM HUP PIPE EXIT
echo "We need to run this!" >> /sdcard/cleanup.log
}
trap cleanup INT TERM HUP PIPE EXIT
echo "Some long running fancy stuff"
sleep 60
当我推送它并通过交互式 shell 运行它时,它工作正常。
在 CTRL-C 上它调用cleanup(),但是当我从主机运行它时
adb shell /path/to/script 然后无论我向主机 adb 发送什么信号,设备 cleanup() 都不会被调用。
我期待 adbd 在 adb 连接断开的情况下向设备上的整个进程组发送 SIGHUP。
目前我能想到的唯一解决方案是启动separatce anti-watchdog 类型的进程,该进程将保持池化进程并在未找到时运行清理,但这太丑陋了,我决定向你们询问一些建议。
【问题讨论】:
标签: android shell process adb signals