Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:init.d脚本,用于监视和终止进程_Android_Bash_Boot_Init.d - Fatal编程技术网

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

Android:init.d脚本,用于监视和终止进程,android,bash,boot,init.d,Android,Bash,Boot,Init.d,我在Nexus5上运行android 5.1.1,并试图使用脚本终止进程kill_process.sh while true; do PROCESS=$(pgrep -l whatsapp) if [[ $PROCESS == *"whatsapp"* ]]; then kill $(pgrep -f whatsapp) fi done 我可以使用appuniversalinit.d在启动时运行脚本,但是这个特定的脚本在启动时似乎不起作用。只要我将ssh连接到手

我在Nexus5上运行android 5.1.1,并试图使用脚本终止进程kill_process.sh

while true; do
    PROCESS=$(pgrep -l whatsapp)
    if [[ $PROCESS == *"whatsapp"* ]]; then
        kill $(pgrep -f whatsapp)
fi
done
我可以使用appuniversalinit.d在启动时运行脚本,但是这个特定的脚本在启动时似乎不起作用。只要我将ssh连接到手机并手动运行它,它就可以正常工作。例如,一旦我启动whatsapp,它马上就会被杀死

有人知道我能做些什么让它在开机时工作吗? 另外,一个while循环可能不是最有效的方法…所以任何想法都是受欢迎的

编辑1: 将if语句更改为 案例$PROCESS in*whatsapp* 杀死$pgrep-f whatsapp 以撒

Edit2:有没有办法对脚本进行后台监控


Edit3:我设置了另一个脚本,其中只包含一行start-stop daemon-exec/path\u to\u main\u script/kill\u process.sh-S。我只将新脚本放在/system/etc/init.d目录中,将kill\u process.sh脚本放在/system/etc/的另一个子目录中。这样,新脚本将在启动时运行,然后调用kill_process.sh脚本。但它运行不稳定,这是由universalinit.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 $?
结论:您应该检查应用程序使用的外壳。很可能[[语法与*组合失败。我认为这是busybox或dash的问题

为了节省电池,我建议至少更换电池,而实际上是


但这也只是一个黑客行为。你应该寻找一个基于事件的解决方案在这方面帮不上你的忙

至少,我会用sleep 1代替true。但不管你做什么,这对电池都不好……我在*whatsapp*kill$pgrep-f whatsapp esac中将if语句改为case$PROCESS,尽管我认为这不是问题,因为我可以手动执行脚本,然后它就可以工作了…这个应用程序真的在后台运行脚本吗?初始化脚本通常不适合长期运行。它们通常只执行短期操作并启动守护进程…脚本中的假守护进程可能如下所示:while…;do…done;&这个应用程序只是模拟Init.d支持。我使用这个因为股票内核显然不支持init.d。你的假守护进程想法似乎不起作用:我仍然可以运行一个应用程序,它应该被脚本杀死。我需要再次手动运行脚本。基本上我需要的是一个进程监视器,然后是killer,它可以在重新启动后存活下来,也就是说,它在启动时启动。I just试图用一个脚本来实现这一点,但也许有更好的方法?有没有办法对脚本进行后台监控?或者编写我自己的后台程序?我设法让脚本在启动时运行,但不幸的是,它运行不太稳定。我设置了另一个脚本,其中包含一行:start-stop-daemon-exec/path\u to\u main\u script/kill\u process.sh-s。我只放了一行/system/etc/init.d目录中的新脚本和/system/etc/中的另一个子目录中的kill_process.sh脚本。这样,新脚本在启动时运行,然后调用kill_process.sh脚本。如前所述,它运行不稳定,这是由通用init.d应用程序引起的:当应用程序崩溃时,脚本停止运行。有什么想法吗?没有。我认为是安卓cgroup系统,一旦不再需要,它会删除流程中的所有内容。这通常是一件好事。你必须寻找另一个为此目的而开发的应用程序,或者开发自己的应用程序。如果只是为了摆脱whatsapp,你可能想使用类似根应用程序Del的东西计量器
while sleep 1; do