Comment fonctionnent les tueurs de tâches?

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

Existe-t-il une API pour cela, et si oui, que fait-il réellement ?

Modifier

Mérite d'être ajouté: j'ai vu des applications task killer tuer des processus sur not rooted devices. Donc, je me demande comment est-il possible de tuer le processus, que vous ne possédez pas dans Android?

38
demandé sur hasanghaforian 2011-09-21 19:21:15

1 réponses

En un mot, Les Tueurs de tâches automatiques fonctionnent en interrogeant le système d'exploitation pour une liste des processus en cours d'exécution et de la mémoire qu'ils consomment. Ensuite, soit avec un algorithme intelligent ou avec l'entrée de l'utilisateur, les tueurs de tâches émettent un appel au système indiquant au système de tuer le processus. Il y a deux API que vous pouvez faire.

Ils sont

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

Cela fonctionne d'abord en appelant Process.killProcess(int pid)pid est l'identifiant unique pour un des processus spécifiques. Android tue les processus de la même manière que linux; cependant, un utilisateur ne peut tuer les processus qu'ils possèdent. Dans Android, chaque application est exécutée avec un UID unique (UserID). Applications utilisant cette API une application ne peut tuer que leurs propres processus, d'où l'explication suivante dans les documents pour Process.killProcess(int pid):

Tuer le processus avec le PID donné. Notez que, bien que cette API permette nous demander de tuer tout processus basé sur son PID, le noyau encore imposer restrictions standard sur les pid que vous êtes réellement capable tuer. En règle générale cela signifie que le processus en cours d'exécution de l'appelant packages / application et tout processus supplémentaire créé par cette application; les paquets partageant un UID commun pourront également tuer les uns les autres processus.

Lorsque cette méthode est appelée signal est généré par le système d'exploitation et envoyé au processus. Chaque fois qu'un processus reçoit un signal du système d'exploitation il doit gérer ce signal ou immédiatement mourir. Les signaux tels que SIG_KILL ne peuvent pas être manipulés et entraînent la mort immédiate du processus destinataire. Si vous voulez tuer des processus que vous n'avez pas de privilèges à tuer, c'est-à-dire que ce n'est pas votre processus, vous devez changer d'utilisateur ou escalader vos privilèges (sur android, cela nécessite des privilèges root sur l'appareil).

La deuxième API fonctionne en indiquant au ActivityManager intégré que vous wan pour tuer les processus associés à un paquet spécifique. cette API permet de contourner le besoin de votre UID doit correspondre à L'UID du processus car il nécessite que l'utilisateur accepte l'autorisation KILL_BACKGROUND_PROCESSES. Cette autorisation signale au système d'exploitation qu'une application a été approuvée par l'utilisateur en tant que task killer . Quand un tueur de tâches veut tuer une application, il dit au système d'exploitation de tuer le processus permettant à une application de contourner le problème de ne pouvoir tuer que les processus qu'elle possède.

Dans les documents Android, il est dit que cette API utilise réellement la première API Process.killProcess

Que le système tue immédiatement tous les processus d'arrière-plan associés avec le paquet donné. C'est la même chose que le noyau tuant ceux processus de récupération de la mémoire; le système s'occupera du redémarrage 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 la commande Linux kill

53
répondu slayton 2012-04-03 18:40:27