38

The usefullness of task killer apps is debated, but I'm wondering: how do they actually work? How is it possible to kill particular process?

Is there an API for this, and if so what does it actually do?

EDIT

Worth adding: I saw task killer apps kill processes on not rooted devices. So, I wonder how is it possible to kill process, which you don't own in Android?

hasanghaforian
  • 13,858
  • 11
  • 76
  • 167
  • 1
    Should be on http://android.stackexchange.com/ – Thomas Clayson Sep 21 '11 at 15:24
  • 22
    Well I think its a actual question which belongs to SO: He wants to know why and how it is programmatically possible to kill processes on android. This is programming related in my eyes and a very interessting question. – theomega Sep 21 '11 at 15:28
  • for android/multitasking: http://android-developers.blogspot.com/2010/04/multitasking-android-way.html – definitely undefinable Sep 21 '11 at 15:42
  • 8
    Really strange to close this question. It is programming-related. –  Sep 21 '11 at 17:00
  • I'm unable to see how understanding the inner workings of the system's process model are not important to an Android developer. Yes, this probably could be answered on [android.se]... but ideally here you would get a developer-focused answer. – Shog9 Sep 24 '11 at 00:13
  • it is programming related following shog's edits. The original question was more of a general question to which I attempted to answer, and which I felt would be better on android.se – Thomas Clayson Sep 25 '11 at 19:57
  • Here is one way to do it: http://developer.android.com/reference/android/app/ActivityManager.html#killBackgroundProcesses(java.lang.String) There's also: http://developer.android.com/reference/android/os/Process.html#killProcess(int) – Romain Guy Sep 26 '11 at 18:32

1 Answers1

53

In a nutshell, Automatic Task Killers work by polling the OS for a list of currently running processes and the memory they are consuming. Then either with an intelligent algorithm or with user input the Task Killers issue a call to the system telling the system to kill the process. There are two apis you can do this.

They are

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

This first works by invoking Process.killProcess(int pid) where pid is the unique identifier for a specific process. Android kills processes in the same way that linux does; however, a user may only kill processes that they own. In Android each app is run with a unique UID (UserID). Apps using this API an App can only kill their own processes, hence the following explanation in the docs for Process.killProcess(int pid):

Kill the process with the given PID. Note that, though this API allows us to request to kill any process based on its PID, the kernel will still impose standard restrictions on which PIDs you are actually able to kill. Typically this means only the process running the caller's packages/application and any additional processes created by that app; packages sharing a common UID will also be able to kill each other's processes.

When this method is called the signal is generated by the OS and sent to the process. Whenever a process receives a signal from the OS it must either handle that signal or immediately die. Signals such as SIG_KILL cannot be handled and result in the immediate death of the recipient process. If you want to kill processes that you don't have privileges to kill, i.e. its not your process, then you must switch users or escalate your privileges (on android this requires root privileges on the device).

The second API works by telling the built in ActivityManager that you wan to kill processes associated with a specific Package. This API gets around the need for your UID to match the UID of the process because it requires the user to accept the KILL_BACKGROUND_PROCESSES permission. This permission signals to the OS that an app has been approved by the user as a task killer. When a task killer wants to kill an app, it tells the OS to kill the process allowing an app to get around the problem of only being able to kill processes that it owns.

In the Android Docs it says that this API actually uses the first Process.killProcess API

Have the system immediately kill all background processes associated with the given package. This is the same as the kernel killing those processes to reclaim memory; the system will take care of restarting these processes in the future as needed.

If you want to know more I suggest you read about the Posix Signals and The Linux kill command

slayton
  • 20,123
  • 10
  • 60
  • 89
  • `ActivityManager.killBackgroundProcesses(String packageName)` is not removing the apps from the recent apps screen which comes after pressing the overview button. – zeitgeist Mar 02 '22 at 10:32