任务杀手如何运作?

Igo*_*pov 38 android task kill-process

task killer应用程序的实用性是有争议的,但我想知道:它们如何实际工作?如何杀死特定进程?

是否有一个API,如果是这样,它实际上做了什么?

编辑

值得补充:我看到任务杀手应用会杀死进程not rooted devices.所以,我想知道如何杀死Android中没有的进程?

sla*_*ton 53

简而言之,自动任务杀手通过轮询操作系统来查找当前正在运行的进程及其消耗的内存列表.然后,通过智能算法或用户输入,任务杀手向系统发出呼叫,告知系统终止进程.你可以做两个api.

他们是

  • Process.killProcess(int pid)
  • ActivityManager.killBackgroundProcesses(String packageName)

这首作品通过调用Process.killProcess(int pid)其中pid的特定进程的唯一标识符.Android以与linux相同的方式杀死进程; 但是,用户可能只会杀死他们拥有的进程.在Android中,每个应用程序都使用唯一的UID(UserID)运行.使用此API的应用程序只能杀死自己的进程,因此文档中Process.killProcess(int pid)的以下说明适用于:

使用给定的PID终止进程.请注意,尽管此API允许我们根据其PID请求终止任何进程,但内核仍将对您实际可以杀死的PID施加标准限制.通常,这意味着只有运行调用者的包/应用程序的进程以及该应用程序创建的任何其他进程; 共享公共UID的软件包也可以杀死彼此的进程.

调用此方法时,信号由OS生成并发送到进程.每当进程从OS接收信号时,它必须处理该信号或立即死亡.诸如此类的信号SIG_KILL无法处理并导致收件人进程立即死亡.如果你想杀死你没有杀死权限的进程,即它不是你的进程,那么你必须切换用户或升级你的权限(在Android上这需要设备上的root权限).

第二个API的工作原理是告诉内置ActivityManager您要杀死与特定Package关联的进程.此API可以满足您的UID与流程的UID匹配的需要,因为它要求用户接受该KILL_BACKGROUND_PROCESSES权限.此许可向操作系统发出信号,表明应用已被用户批准为任务杀手.当任务杀手想要杀死一个应用程序时,它告诉操作系统终止该进程,允许应用程序解决只能杀死它拥有的进程的问题.

Android Docs中,它说这个API实际上使用了第一个Process.killProcessAPI

让系统立即终止与给定包关联的所有后台进程.这与杀死那些进程以回收内存的内核相同; 系统将根据需要在将来重新启动这些流程.

如果您想了解更多,我建议您阅读有关Posix信号Linux kill命令的信息