繁体   English   中英

Android:init.d脚本来监视和杀死进程

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM