[英]Android: init.d script to monitor and kill a process
我在nexus 5上运行了股票android(5.1.1),并尝试使用脚本杀死进程(kill_process.sh)。
while true; do
PROCESS=$(pgrep -l whatsapp)
if [[ $PROCESS == *"whatsapp"* ]]; then
kill $(pgrep -f whatsapp)
fi
done
我可以使用应用程序“ Universal Init.d”在启动时运行脚本,但是该特定脚本似乎在启动时无法运行。 只要我将其插入手机并手动运行,它就可以工作。 例如,一旦我启动whatsapp,它就会立即被杀死。
有人有什么想法我可以做些什么来使其在引导时起作用吗?
另外,while循环可能不是执行此操作的最有效方法……因此欢迎任何想法。
Edit1:将if语句更改为
case $PROCESS in *"whatsapp"*) kill $(pgrep -f whatsapp) esac
Edit2:有没有办法守护脚本?
Edit3:我设置了另一个仅包含一行start-stop-daemon --exec /path_to_main_script/kill_process.sh -S
脚本。 我只将新脚本放在/system/etc/init.d目录中,并将kill_process.sh脚本放在/ system / etc /中的另一个子目录中。 这样,新脚本将在引导时运行,然后调用kill_process.sh脚本。 但是它运行不稳定,这是由“ Universal Init.d”应用程序引起的:当应用程序崩溃时,脚本将停止运行。 有任何想法吗?
免责声明:我从未使用过Universal Init.d应用程序,也没有丰富的Android使用经验。 但是我在桌面上做了一些测试:
me:~$ bash -x /tmp/x
+ a=abcd
+ [[ abcd == *bc* ]]
+ echo 0
0 # correct
me:~$ dash -x /tmp/x
+ a=abcd
+ [[ abcd == *bc* ]]
/tmp/x: 3: /tmp/x: [[: not found
+ echo 127
127 # [[ not supported
me:~$ busybox sh -x /tmp/x
+ a=abcd
+ [[ abcd == *bc* ]]
+ echo 1
1 # wrong!
剧本:
a=abcd
[[ $a == *bc* ]]
echo $?
结论:您应该检查应用程序使用的外壳。 [[
语法与*
组合使用可能会失败。 我认为那里是忙碌箱或破折号...
为了节省电池,我建议至少将while true
替换为
while sleep 1; do
但这也只是一个hack。 您应该寻找基于事件的解决方案(无法为您提供帮助)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.