Android:init.d脚本,用于监视和终止进程

时间:2015-09-13 14:31:32

标签: android bash boot init.d

我在我的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

我能够使用app" Universal Init.d"启动脚本,但是这个特定的脚本似乎没有在启动时工作。只要我将ssh插入手机并手动运行,它就能正常工作。例如,一旦我发布了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" app:当应用程序崩溃时,脚本停止运行。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

免责声明:我从未使用过该应用 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 $?

结论:您应该检查应用程序使用的shell。与[[结合的*语法可能会失败。我认为它是忙碌的或者在那里冲刺......

为了节省电池电量,我建议至少用

替换while true
while sleep 1; do

但这也只是一个黑客攻击。您应该寻找基于事件的解决方案(无法帮助您)