task killer应用程序的有用性是有争议的,但我想知道:它们究竟是如何工作的?如何才能杀死特定的过程?
是否有这样的API,如果是的话,实际上做什么?
编辑
值得补充的是:我看到任务杀手应用程序在not rooted devices上杀死进程。所以,我想知道如何才能杀死你在Android中没有的进程呢?
发布于 2011-09-26 19:08:18
简而言之,自动任务杀手的工作方式是轮询操作系统中当前正在运行的进程列表和它们正在消耗的内存。然后,使用智能算法或用户输入,Task向系统发出一个呼叫,告诉系统终止进程。有两个apis可以这样做。
他们是
Process.killProcess(int pid) ActivityManager.killBackgroundProcesses(String packageName)第一个方法是调用Process.killProcess(int pid),其中pid是特定进程的唯一标识符。Android以与linux相同的方式杀死进程;然而,用户只能杀死他们拥有的进程。在安卓系统中,每个应用程序都有一个唯一的UID (UserID)。使用此API的应用程序只能杀死它们自己的进程,因此使用以下explanation in the docs for Process.killProcess(int pid):
用给定的PID终止进程。注意,虽然这个API允许我们根据它的PID请求终止任何进程,但是内核仍然会施加标准限制,您实际上可以在其中杀死PID。通常,这意味着只有运行调用方包/应用程序的进程和该应用程序创建的任何附加进程;共享公共UID的包也可以相互杀死对方的进程。
当此方法被调用时,signal由操作系统生成并发送到进程。每当进程接收到来自操作系统的信号时,它都必须处理该信号或立即死亡。不能处理诸如SIG_KILL这样的信号,并导致收件人进程立即死亡。如果您想要杀死您没有权限的进程,即它不是您的进程,那么您必须切换用户或升级您的权限(在android上,这需要设备上的根权限)。
第二个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的文章
https://stackoverflow.com/questions/7502340
复制相似问题