38 votes

Comment fonctionnent les tueurs de tâches?

L'utilité des applications task killer est discutée, mais je me demande: comment fonctionnent-elles réellement? Comment est-il possible de tuer un processus particulier?

Y at - il une API pour cela, et si oui que fait - il en fait?

MODIFIER

Cela vaut la peine d’ajouter: j’ai vu des applications meurtrières tuer des processus sur not rooted devices . Alors, je me demande comment est-il possible de tuer un processus que vous ne possédez pas dans Android?

53voto

slayton Points 13049

En un mot, la Tâche Automatique des Tueurs de travail en interrogeant le système d'exploitation pour obtenir une liste des processus en cours d'exécution et la mémoire qu'ils consomment. Ensuite, soit avec un algorithme intelligent ou avec la saisie de l'utilisateur la Tâche des Tueurs émettre un appel vers le système de raconter le système à tuer le processus. Il y a deux api, vous pouvez le faire.

Ils sont

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

Ce premier fonctionne en invoquant Process.killProcess(int pid)pid est l'identifiant unique d'un processus spécifique. Android tue les processus de la même manière que linux n'; cependant, un utilisateur ne peut tuer les processus dont ils sont propriétaires. Dans Android, chaque application est exécutée avec un unique UID (Identifiant utilisateur). Les applications utilisant cette API, une Application ne peut tuer de leurs propres processus, d'où la suite de l'explication dans les docs pour Process.killProcess(int pid):

Tuer le processus avec le PID. Notez que, bien que cette API permet - nous pour une demande de tuer tous les processus sur la base de son PID, le noyau encore imposer la norme de restrictions sur ce qui Pid que vous êtes réellement en mesure pour tuer. Typiquement, cela signifie que le processus de l'exécution de l'appelant forfaits/applications et de tout autre processus créés par cette application; les paquets partageant un même UID sera également en mesure de se tuer les uns les autres les processus.

Lorsque cette méthode est appelée le signal est généré par le système d'exploitation et envoyé au processus. Lorsqu'un processus reçoit un signal de l'OS, elle doit gérer le signal ou immédiatement mourir. Des signaux tels que SIG_KILL ne peut pas être traitée et entraîner la mort immédiate du destinataire processus. Si vous voulez tuer les processus que vous n'avez pas de privilèges pour les tuer, c'est à dire ce n'est pas votre processus, vous devez changer d'utilisateur ou d'intensifier vos privilèges (sur android cela nécessite les privilèges de root sur l'appareil).

La deuxième API travaille en racontant l'construite en ActivityManager que vous wan pour tuer les processus associés à un Forfait spécifique. Cette API permet de contourner la nécessité pour votre UID pour correspondre à l'UID du processus , car il oblige l'utilisateur à accepter l' KILL_BACKGROUND_PROCESSES autorisation. Cette autorisation signaux pour le système d'exploitation qu'une application a été approuvée par l'utilisateur comme un tueur de tâches. Quand un tueur de tâches veut tuer une application, il raconte l'OS de tuer le processus qui permet à une application de contourner le problème de ne pouvoir tuer les processus dont il est propriétaire.

Dans l' Android Docs il est dit que cette API utilise en fait le premier Process.killProcess API

Le système immédiatement tuer tous les processus d'arrière-plan associé avec le paquet donné. C'est le même que le noyau de tuer ceux les processus pour récupérer de la mémoire; le système va redémarrer ces processus dans l'avenir en tant que de besoin.

Si vous voulez en savoir plus je vous suggère de lire sur les Signaux Posix et Linux, La commande kill

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X