Jak działa task killers?

Użyteczność task killer aplikacji jest dyskutowana, ale zastanawiam się: jak one właściwie działają? Jak można zabić określony proces?

Czy jest do tego API, a jeśli tak, to co robi ?

EDIT

Warto dodać: widziałem aplikacje task killer zabijają procesy na not rooted devices. Zastanawiam się, jak można zabić proces, którego nie posiadasz w Androidzie?

Author: hasanghaforian, 2011-09-21

1 answers

W skrócie, Automatyczny zabójca zadań działa poprzez sprawdzenie systemu operacyjnego pod kątem listy aktualnie uruchomionych procesów i pamięci, którą zużywają. Następnie albo za pomocą inteligentnego algorytmu, albo za pomocą wejścia użytkownika, zabójcy Zadań wydają wezwanie do systemu, mówiące systemowi, aby zabił proces. Istnieją dwa interfejsy API, które możesz to zrobić.

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

Ten pierwszy działa poprzez wywołanie Process.killProcess(int pid) gdzie pid jest unikalnym identyfikatorem dla specyficzny proces. Android zabija procesy w taki sam sposób jak linux; jednak użytkownik może zabić tylko te procesy, które posiada. W systemie Android każda aplikacja jest uruchamiana z unikalnym UID (UserID). Aplikacje korzystające z tego API aplikacja może zabić tylko własne procesy, stąd następujące wyjaśnienie W dokumentach dla Process.killProcess(int pid):

Zabić proces z podanym PID. Zauważ, że chociaż ten API pozwala nas, aby zażądać zabicia dowolnego procesu opartego na jego PID, jądro będzie nadal narzucać standardowe ograniczenia, na które PID jesteś w stanie zabić. Zazwyczaj oznacza to tylko proces uruchomiony przez wywołującego Pakiety/aplikacja i wszelkie dodatkowe procesy utworzone przez tę aplikację; Pakiety współdzielące wspólny UID będą również mogły się nawzajem zabijać procesy.

Gdy ta metoda jest wywoływana, sygnał jest generowany przez system operacyjny i wysyłany do procesu. Gdy proces odbiera sygnał z systemu operacyjnego, musi albo obsłużyć ten sygnał, albo natychmiast umrzeć. Sygnały takie jak SIG_KILL nie mogą być obsługiwane i powodują natychmiastową śmierć procesu odbiorcy. Jeśli chcesz zabić procesy, których nie masz uprawnień do zabicia, tzn. nie jest to twój proces, musisz zmienić użytkowników lub zwiększyć swoje uprawnienia(na Androidzie wymaga to uprawnień roota na urządzeniu).

Drugie API działa poprzez poinformowanie wbudowanego ActivityManager, że chcesz zabić procesy związane z konkretnym pakietem. ten API pozwala obejść potrzebę Twój UID, aby pasował do UID procesu , ponieważ wymaga od użytkownika zaakceptowania uprawnień KILL_BACKGROUND_PROCESSES. To uprawnienie sygnalizuje systemowi, że aplikacja została zatwierdzona przez użytkownika jako zabójca zadań . Gdy zabójca zadań chce zabić aplikację, mówi system operacyjny, aby zabić proces, pozwalając aplikacji ominąć problem tylko jest w stanie zabić procesy, które posiada.

W dokumentach Androida jest napisane, że API używa pierwszego Process.killProcess API

Niech system natychmiast zabije wszystkie procesy związane z tłem z podanym pakietem. To jest to samo co jądro zabijające te procesów odzyskiwania pamięci; system zajmie się ponownym uruchomieniem te procesy w przyszłości w razie potrzeby.

Jeśli chcesz wiedzieć więcej, proponuję poczytać o Sygnałach Posix i poleceniu Linux kill

 53
Author: slayton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-03 18:40:27