task killer
应用程序的实用性受到争议,但我想知道:它们实际上是如何工作的?如何杀死特定进程?
是否有针对此的API,如果有,它实际上做什么?
修改
值得补充:我看到任务杀手应用会在not rooted devices
上杀死进程。所以,我想知道如何杀死你在Android中不拥有的进程?
答案 0 :(得分:53)
简而言之,自动任务杀手通过轮询操作系统来查找当前正在运行的进程及其消耗的内存列表。然后,通过智能算法或用户输入,任务杀手向系统发出呼叫,告知系统终止进程。你可以做两个api。
他们是
Process.killProcess(int pid)
ActivityManager.killBackgroundProcesses(String packageName)
首先调用Process.killProcess(int pid)
,其中pid
是特定进程的唯一标识符。 Android以与linux相同的方式杀死进程;但是,用户可能只会杀死他们拥有的进程。在Android中,每个应用程序都使用唯一的UID(UserID)运行。使用此API的应用程序只能杀死自己的进程,因此可以使用以下explanation in the docs for Process.killProcess(int pid)
:
使用给定的PID终止进程。请注意,尽管此API允许 我们要求基于其PID来杀死任何进程,内核会 仍然对您实际能够使用的PID施加标准限制 要杀了通常,这意味着只有运行调用者的进程 包/应用程序以及该应用程序创建的任何其他进程; 共享一个普通UID的软件包也可以互相杀死 过程
调用此方法时,操作系统会生成signal并将其发送给进程。每当进程从OS接收信号时,它必须处理该信号或立即死亡。无法处理SIG_KILL
等信号,导致收件人进程立即死亡。如果你想杀死你没有杀死权限的进程,即它不是你的进程,那么你必须切换用户或升级你的权限(在Android上这需要设备上的root权限)。
第二个API通过告诉内置ActivityManager
您要杀死与特定包关联的进程来工作。 此API可以满足您的UID与流程的UID相匹配的需求,因为它要求用户接受KILL_BACKGROUND_PROCESSES
权限。此权限向操作系统发出信号,表明用户已将应用程序批准为任务杀手。当任务杀手想要杀死一个应用程序时,它会告诉操作系统终止该进程,允许应用程序解决只能杀死它拥有的进程的问题。
在Android Docs it says that this API actually uses the first Process.killProcess
API
让系统立即终止所有关联的后台进程 与给定的包。这与杀死那些的内核相同 回收记忆的过程;系统将负责重启 根据需要在未来进行这些过程。
如果您想了解更多信息,建议您阅读Posix Signals和The Linux kill command