Process.java revision ded209843616a98e6f97db0d1784f6d630cbd5e9
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.os; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1934385d352da19805ae948215e2edbeedd16b7941Elliott Hughesimport android.system.Os; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Log; 21ded209843616a98e6f97db0d1784f6d630cbd5e9Robert Sesekimport android.webkit.WebViewZygote; 22ee0cdce2a80f8cc033378134e37092bc467c0f38Andreas Gampeimport dalvik.system.VMRuntime; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Tools for managing OS processes. 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class Process { 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String LOG_TAG = "Process"; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3064cd907af99ce9702e8975a657ee437c2626f8b5Narayan Kamath /** 3164cd907af99ce9702e8975a657ee437c2626f8b5Narayan Kamath * @hide for internal use only. 3264cd907af99ce9702e8975a657ee437c2626f8b5Narayan Kamath */ 3364cd907af99ce9702e8975a657ee437c2626f8b5Narayan Kamath public static final String ZYGOTE_SOCKET = "zygote"; 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3564cd907af99ce9702e8975a657ee437c2626f8b5Narayan Kamath /** 3664cd907af99ce9702e8975a657ee437c2626f8b5Narayan Kamath * @hide for internal use only. 3764cd907af99ce9702e8975a657ee437c2626f8b5Narayan Kamath */ 3864cd907af99ce9702e8975a657ee437c2626f8b5Narayan Kamath public static final String SECONDARY_ZYGOTE_SOCKET = "zygote_secondary"; 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 411cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey * Defines the root UID. 421cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey * @hide 431cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey */ 441cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey public static final int ROOT_UID = 0; 451cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey 461cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey /** 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Defines the UID/GID under which system code runs. 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int SYSTEM_UID = 1000; 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Defines the UID/GID under which the telephony code runs. 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int PHONE_UID = 1001; 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 57854060af30f928c0a65591e9c8314ae17056e6b8Dianne Hackborn * Defines the UID/GID for the user shell. 58854060af30f928c0a65591e9c8314ae17056e6b8Dianne Hackborn * @hide 59854060af30f928c0a65591e9c8314ae17056e6b8Dianne Hackborn */ 60854060af30f928c0a65591e9c8314ae17056e6b8Dianne Hackborn public static final int SHELL_UID = 2000; 61854060af30f928c0a65591e9c8314ae17056e6b8Dianne Hackborn 62854060af30f928c0a65591e9c8314ae17056e6b8Dianne Hackborn /** 63d42685d5de1dbd6d75b48d42418f370adaa4daefMike Lockwood * Defines the UID/GID for the log group. 64d42685d5de1dbd6d75b48d42418f370adaa4daefMike Lockwood * @hide 65d42685d5de1dbd6d75b48d42418f370adaa4daefMike Lockwood */ 66d42685d5de1dbd6d75b48d42418f370adaa4daefMike Lockwood public static final int LOG_UID = 1007; 67d42685d5de1dbd6d75b48d42418f370adaa4daefMike Lockwood 68d42685d5de1dbd6d75b48d42418f370adaa4daefMike Lockwood /** 69d158214511a3c04753de04fa6389e46d33135c38Amith Yamasani * Defines the UID/GID for the WIFI supplicant process. 70d158214511a3c04753de04fa6389e46d33135c38Amith Yamasani * @hide 71d158214511a3c04753de04fa6389e46d33135c38Amith Yamasani */ 72d158214511a3c04753de04fa6389e46d33135c38Amith Yamasani public static final int WIFI_UID = 1010; 73d158214511a3c04753de04fa6389e46d33135c38Amith Yamasani 74d158214511a3c04753de04fa6389e46d33135c38Amith Yamasani /** 758b7d1b4d4a33e9429c5cedaa6317efcaad95da68Glenn Kasten * Defines the UID/GID for the mediaserver process. 768b7d1b4d4a33e9429c5cedaa6317efcaad95da68Glenn Kasten * @hide 778b7d1b4d4a33e9429c5cedaa6317efcaad95da68Glenn Kasten */ 788b7d1b4d4a33e9429c5cedaa6317efcaad95da68Glenn Kasten public static final int MEDIA_UID = 1013; 798b7d1b4d4a33e9429c5cedaa6317efcaad95da68Glenn Kasten 808b7d1b4d4a33e9429c5cedaa6317efcaad95da68Glenn Kasten /** 815294a2fc2f401cd248a4bc3f0f9ee1e2854f4e9aJeff Sharkey * Defines the UID/GID for the DRM process. 825294a2fc2f401cd248a4bc3f0f9ee1e2854f4e9aJeff Sharkey * @hide 835294a2fc2f401cd248a4bc3f0f9ee1e2854f4e9aJeff Sharkey */ 845294a2fc2f401cd248a4bc3f0f9ee1e2854f4e9aJeff Sharkey public static final int DRM_UID = 1019; 855294a2fc2f401cd248a4bc3f0f9ee1e2854f4e9aJeff Sharkey 865294a2fc2f401cd248a4bc3f0f9ee1e2854f4e9aJeff Sharkey /** 8726993b37d525fd64efebd51daec1b4abfebd8a74Kenny Root * Defines the UID/GID for the group that controls VPN services. 8826993b37d525fd64efebd51daec1b4abfebd8a74Kenny Root * @hide 8926993b37d525fd64efebd51daec1b4abfebd8a74Kenny Root */ 9026993b37d525fd64efebd51daec1b4abfebd8a74Kenny Root public static final int VPN_UID = 1016; 9126993b37d525fd64efebd51daec1b4abfebd8a74Kenny Root 9226993b37d525fd64efebd51daec1b4abfebd8a74Kenny Root /** 93cd0e839a2448deea50f79bddeba782c546b33893Nick Pelly * Defines the UID/GID for the NFC service process. 94cd0e839a2448deea50f79bddeba782c546b33893Nick Pelly * @hide 95cd0e839a2448deea50f79bddeba782c546b33893Nick Pelly */ 96a5cb9f42174a52afbeb7e33dab64282f52f8cedbNick Pelly public static final int NFC_UID = 1027; 97cd0e839a2448deea50f79bddeba782c546b33893Nick Pelly 98cd0e839a2448deea50f79bddeba782c546b33893Nick Pelly /** 991abb1cb3a8fe17f7866150604c2fd73751da787eJaikumar Ganesh * Defines the UID/GID for the Bluetooth service process. 1001abb1cb3a8fe17f7866150604c2fd73751da787eJaikumar Ganesh * @hide 1011abb1cb3a8fe17f7866150604c2fd73751da787eJaikumar Ganesh */ 1021abb1cb3a8fe17f7866150604c2fd73751da787eJaikumar Ganesh public static final int BLUETOOTH_UID = 1002; 1031abb1cb3a8fe17f7866150604c2fd73751da787eJaikumar Ganesh 1041abb1cb3a8fe17f7866150604c2fd73751da787eJaikumar Ganesh /** 105dcaa10cd361a543cfa93bbb5c53444f437bd07a4Mike Lockwood * Defines the GID for the group that allows write access to the internal media storage. 106dcaa10cd361a543cfa93bbb5c53444f437bd07a4Mike Lockwood * @hide 107dcaa10cd361a543cfa93bbb5c53444f437bd07a4Mike Lockwood */ 108dcaa10cd361a543cfa93bbb5c53444f437bd07a4Mike Lockwood public static final int MEDIA_RW_GID = 1023; 109dcaa10cd361a543cfa93bbb5c53444f437bd07a4Mike Lockwood 110dcaa10cd361a543cfa93bbb5c53444f437bd07a4Mike Lockwood /** 111184a0100abc431fc3d6d8dd1b20212b84958cadaJeff Sharkey * Access to installed package details 112184a0100abc431fc3d6d8dd1b20212b84958cadaJeff Sharkey * @hide 113184a0100abc431fc3d6d8dd1b20212b84958cadaJeff Sharkey */ 114184a0100abc431fc3d6d8dd1b20212b84958cadaJeff Sharkey public static final int PACKAGE_INFO_GID = 1032; 115184a0100abc431fc3d6d8dd1b20212b84958cadaJeff Sharkey 116184a0100abc431fc3d6d8dd1b20212b84958cadaJeff Sharkey /** 11708cfaf672604422dd355d6703aec78f3aa5ee74eTorne (Richard Coles) * Defines the UID/GID for the shared RELRO file updater process. 11808cfaf672604422dd355d6703aec78f3aa5ee74eTorne (Richard Coles) * @hide 11908cfaf672604422dd355d6703aec78f3aa5ee74eTorne (Richard Coles) */ 12008cfaf672604422dd355d6703aec78f3aa5ee74eTorne (Richard Coles) public static final int SHARED_RELRO_UID = 1037; 12108cfaf672604422dd355d6703aec78f3aa5ee74eTorne (Richard Coles) 12208cfaf672604422dd355d6703aec78f3aa5ee74eTorne (Richard Coles) /** 123ed0ea40a41aae8e65bc189efe6b631ca78259383Andy Hung * Defines the UID/GID for the audioserver process. 124ed0ea40a41aae8e65bc189efe6b631ca78259383Andy Hung * @hide 125ed0ea40a41aae8e65bc189efe6b631ca78259383Andy Hung */ 126ed0ea40a41aae8e65bc189efe6b631ca78259383Andy Hung public static final int AUDIOSERVER_UID = 1041; 127ed0ea40a41aae8e65bc189efe6b631ca78259383Andy Hung 128ed0ea40a41aae8e65bc189efe6b631ca78259383Andy Hung /** 12975cade0a5fd5ec432870de9977f81091ab389423Chien-Yu Chen * Defines the UID/GID for the cameraserver process 13075cade0a5fd5ec432870de9977f81091ab389423Chien-Yu Chen * @hide 13175cade0a5fd5ec432870de9977f81091ab389423Chien-Yu Chen */ 132b8b4e85879e93db2ba7821b7fe54710cb6a6de71Chien-Yu Chen public static final int CAMERASERVER_UID = 1047; 13375cade0a5fd5ec432870de9977f81091ab389423Chien-Yu Chen 13475cade0a5fd5ec432870de9977f81091ab389423Chien-Yu Chen /** 135ded209843616a98e6f97db0d1784f6d630cbd5e9Robert Sesek * Defines the UID/GID for the WebView zygote process. 136ded209843616a98e6f97db0d1784f6d630cbd5e9Robert Sesek * @hide 137ded209843616a98e6f97db0d1784f6d630cbd5e9Robert Sesek */ 138ded209843616a98e6f97db0d1784f6d630cbd5e9Robert Sesek public static final int WEBVIEW_ZYGOTE_UID = 1051; 139ded209843616a98e6f97db0d1784f6d630cbd5e9Robert Sesek 140ded209843616a98e6f97db0d1784f6d630cbd5e9Robert Sesek /** 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Defines the start of a range of UIDs (and GIDs), going from this 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * number to {@link #LAST_APPLICATION_UID} that are reserved for assigning 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to applications. 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FIRST_APPLICATION_UID = 10000; 146184a0100abc431fc3d6d8dd1b20212b84958cadaJeff Sharkey 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Last of application-specific UIDs starting at 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #FIRST_APPLICATION_UID}. 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 15121fbd1f7da53dc044737803dccddf8099f1fc1e9Dianne Hackborn public static final int LAST_APPLICATION_UID = 19999; 152a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn 153a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn /** 154a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn * First uid used for fully isolated sandboxed processes (with no permissions of their own) 155a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn * @hide 156a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn */ 157a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn public static final int FIRST_ISOLATED_UID = 99000; 158a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn 159a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn /** 160a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn * Last uid used for fully isolated sandboxed processes (with no permissions of their own) 161a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn * @hide 162a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn */ 163a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn public static final int LAST_ISOLATED_UID = 99999; 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 166e66b6890ee59d108ae5c608f6ec8d4ad20cb06a8Robin Lee * Defines the gid shared by all applications running under the same profile. 167e66b6890ee59d108ae5c608f6ec8d4ad20cb06a8Robin Lee * @hide 168e66b6890ee59d108ae5c608f6ec8d4ad20cb06a8Robin Lee */ 169e66b6890ee59d108ae5c608f6ec8d4ad20cb06a8Robin Lee public static final int SHARED_USER_GID = 9997; 170e66b6890ee59d108ae5c608f6ec8d4ad20cb06a8Robin Lee 171e66b6890ee59d108ae5c608f6ec8d4ad20cb06a8Robin Lee /** 172e091f22e226f7177e45e23850670c1ad9b63fd75Kenny Root * First gid for applications to share resources. Used when forward-locking 173e091f22e226f7177e45e23850670c1ad9b63fd75Kenny Root * is enabled but all UserHandles need to be able to read the resources. 174e091f22e226f7177e45e23850670c1ad9b63fd75Kenny Root * @hide 175e091f22e226f7177e45e23850670c1ad9b63fd75Kenny Root */ 176e091f22e226f7177e45e23850670c1ad9b63fd75Kenny Root public static final int FIRST_SHARED_APPLICATION_GID = 50000; 177e091f22e226f7177e45e23850670c1ad9b63fd75Kenny Root 178e091f22e226f7177e45e23850670c1ad9b63fd75Kenny Root /** 179e091f22e226f7177e45e23850670c1ad9b63fd75Kenny Root * Last gid for applications to share resources. Used when forward-locking 180e091f22e226f7177e45e23850670c1ad9b63fd75Kenny Root * is enabled but all UserHandles need to be able to read the resources. 181e091f22e226f7177e45e23850670c1ad9b63fd75Kenny Root * @hide 182e091f22e226f7177e45e23850670c1ad9b63fd75Kenny Root */ 183e091f22e226f7177e45e23850670c1ad9b63fd75Kenny Root public static final int LAST_SHARED_APPLICATION_GID = 59999; 184e091f22e226f7177e45e23850670c1ad9b63fd75Kenny Root 185e091f22e226f7177e45e23850670c1ad9b63fd75Kenny Root /** 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Standard priority of application threads. 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use with {@link #setThreadPriority(int)} and 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #setThreadPriority(int, int)}, <b>not</b> with the normal 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link java.lang.Thread} class. 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int THREAD_PRIORITY_DEFAULT = 0; 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * *************************************** 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ** Keep in sync with utils/threads.h ** 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * *************************************** 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Lowest available thread priority. Only for those who really, really 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * don't want to run if anything else is happening. 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use with {@link #setThreadPriority(int)} and 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #setThreadPriority(int, int)}, <b>not</b> with the normal 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link java.lang.Thread} class. 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int THREAD_PRIORITY_LOWEST = 19; 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Standard priority background threads. This gives your thread a slightly 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * lower than normal priority, so that it will have less chance of impacting 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the responsiveness of the user interface. 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use with {@link #setThreadPriority(int)} and 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #setThreadPriority(int, int)}, <b>not</b> with the normal 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link java.lang.Thread} class. 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int THREAD_PRIORITY_BACKGROUND = 10; 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Standard priority of threads that are currently running a user interface 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that the user is interacting with. Applications can not normally 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * change to this priority; the system will automatically adjust your 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * application threads as the user moves through the UI. 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use with {@link #setThreadPriority(int)} and 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #setThreadPriority(int, int)}, <b>not</b> with the normal 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link java.lang.Thread} class. 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int THREAD_PRIORITY_FOREGROUND = -2; 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Standard priority of system display threads, involved in updating 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the user interface. Applications can not 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * normally change to this priority. 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use with {@link #setThreadPriority(int)} and 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #setThreadPriority(int, int)}, <b>not</b> with the normal 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link java.lang.Thread} class. 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int THREAD_PRIORITY_DISPLAY = -4; 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Standard priority of the most important display threads, for compositing 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the screen and retrieving input events. Applications can not normally 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * change to this priority. 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use with {@link #setThreadPriority(int)} and 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #setThreadPriority(int, int)}, <b>not</b> with the normal 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link java.lang.Thread} class. 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int THREAD_PRIORITY_URGENT_DISPLAY = -8; 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Standard priority of audio threads. Applications can not normally 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * change to this priority. 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use with {@link #setThreadPriority(int)} and 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #setThreadPriority(int, int)}, <b>not</b> with the normal 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link java.lang.Thread} class. 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int THREAD_PRIORITY_AUDIO = -16; 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Standard priority of the most important audio threads. 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Applications can not normally change to this priority. 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use with {@link #setThreadPriority(int)} and 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #setThreadPriority(int, int)}, <b>not</b> with the normal 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link java.lang.Thread} class. 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int THREAD_PRIORITY_URGENT_AUDIO = -19; 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Minimum increment to make a priority more favorable. 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int THREAD_PRIORITY_MORE_FAVORABLE = -1; 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Minimum increment to make a priority less favorable. 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int THREAD_PRIORITY_LESS_FAVORABLE = +1; 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 277e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat /** 2786793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten * Default scheduling policy 2796793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten * @hide 2806793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten */ 2816793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten public static final int SCHED_OTHER = 0; 2826793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten 2836793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten /** 2846793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten * First-In First-Out scheduling policy 2856793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten * @hide 2866793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten */ 2876793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten public static final int SCHED_FIFO = 1; 2886793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten 2896793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten /** 2906793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten * Round-Robin scheduling policy 2916793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten * @hide 2926793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten */ 2936793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten public static final int SCHED_RR = 2; 2946793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten 2956793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten /** 2966793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten * Batch scheduling policy 2976793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten * @hide 2986793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten */ 2996793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten public static final int SCHED_BATCH = 3; 3006793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten 3016793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten /** 3026793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten * Idle scheduling policy 3036793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten * @hide 3046793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten */ 3056793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten public static final int SCHED_IDLE = 5; 3066793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten 307f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten // Keep in sync with SP_* constants of enum type SchedPolicy 308f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten // declared in system/core/include/cutils/sched_policy.h, 309f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten // except THREAD_GROUP_DEFAULT does not correspond to any SP_* value. 310f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten 3116793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten /** 312f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * Default thread group - 313f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * has meaning with setProcessGroup() only, cannot be used with setThreadGroup(). 314f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * When used with setProcessGroup(), the group of each thread in the process 315f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * is conditionally changed based on that thread's current priority, as follows: 316f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * threads with priority numerically less than THREAD_PRIORITY_BACKGROUND 317f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * are moved to foreground thread group. All other threads are left unchanged. 318e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat * @hide 319e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat */ 320f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten public static final int THREAD_GROUP_DEFAULT = -1; 321e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat 322e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat /** 323f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * Background thread group - All threads in 324e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat * this group are scheduled with a reduced share of the CPU. 325f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * Value is same as constant SP_BACKGROUND of enum SchedPolicy. 326f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * FIXME rename to THREAD_GROUP_BACKGROUND. 327e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat * @hide 328e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat */ 329f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten public static final int THREAD_GROUP_BG_NONINTERACTIVE = 0; 330e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat 331e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat /** 332f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * Foreground thread group - All threads in 333f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * this group are scheduled with a normal share of the CPU. 334f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * Value is same as constant SP_FOREGROUND of enum SchedPolicy. 335f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * Not used at this level. 336e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat * @hide 337e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat **/ 338f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten private static final int THREAD_GROUP_FOREGROUND = 1; 339e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat 34007b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten /** 34107b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten * System thread group. 34207b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten * @hide 34307b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten **/ 34407b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten public static final int THREAD_GROUP_SYSTEM = 2; 34507b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten 34607b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten /** 34707b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten * Application audio thread group. 34807b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten * @hide 34907b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten **/ 35007b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten public static final int THREAD_GROUP_AUDIO_APP = 3; 35107b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten 35207b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten /** 35307b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten * System audio thread group. 35407b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten * @hide 35507b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten **/ 35607b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten public static final int THREAD_GROUP_AUDIO_SYS = 4; 35707b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten 358ece6a22f00de4ab815588e2f7951203adcd2b9c4Tim Murray /** 359ece6a22f00de4ab815588e2f7951203adcd2b9c4Tim Murray * Thread group for top foreground app. 360ece6a22f00de4ab815588e2f7951203adcd2b9c4Tim Murray * @hide 361ece6a22f00de4ab815588e2f7951203adcd2b9c4Tim Murray **/ 362ece6a22f00de4ab815588e2f7951203adcd2b9c4Tim Murray public static final int THREAD_GROUP_TOP_APP = 5; 363ece6a22f00de4ab815588e2f7951203adcd2b9c4Tim Murray 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int SIGNAL_QUIT = 3; 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int SIGNAL_KILL = 9; 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int SIGNAL_USR1 = 10; 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 368d98885c128e7045da244098d82751da6e792d677Dianne Hackborn private static long sStartElapsedRealtime; 369d98885c128e7045da244098d82751da6e792d677Dianne Hackborn private static long sStartUptimeMillis; 370d98885c128e7045da244098d82751da6e792d677Dianne Hackborn 3714444dcd0adc7e035cca030b90ed91f0cff9a772bNarayan Kamath /** 37296b49848e7784bc4b40ffd01e2524461e1efcab7Robert Sesek * State associated with the zygote process. 37396b49848e7784bc4b40ffd01e2524461e1efcab7Robert Sesek * @hide 3744444dcd0adc7e035cca030b90ed91f0cff9a772bNarayan Kamath */ 37596b49848e7784bc4b40ffd01e2524461e1efcab7Robert Sesek public static final ZygoteProcess zygoteProcess = 37696b49848e7784bc4b40ffd01e2524461e1efcab7Robert Sesek new ZygoteProcess(ZYGOTE_SOCKET, SECONDARY_ZYGOTE_SOCKET); 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Start a new process. 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>If processes are enabled, a new process is created and the 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * static main() function of a <var>processClass</var> is executed there. 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The process will continue running after this function returns. 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>If processes are not enabled, a new thread in the caller's 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * process is created and main() of <var>processClass</var> called there. 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>The niceName parameter, if not an empty string, is a custom name to 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * give to the process instead of using processClass. This allows you to 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * make easily identifyable processes even if you are using the same base 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <var>processClass</var> to start them. 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param processClass The class to use as the process's main entry 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * point. 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param niceName A more readable name to use for the process. 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param uid The user-id under which the process will run. 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param gid The group-id under which the process will run. 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param gids Additional group-ids associated with the process. 399e1dfcb7ab01fb991079ec1f70f75281a0ca9073eElliott Hughes * @param debugFlags Additional flags. 400e1dfcb7ab01fb991079ec1f70f75281a0ca9073eElliott Hughes * @param targetSdkVersion The target SDK version for the app. 401bd19b9ee305c11d8aa3cbb105bf2d3a6b06389b5Stephen Smalley * @param seInfo null-ok SELinux information for the new process. 402ff0c470833b2cb4130a30895093630242d5f238dRamin Zaghi * @param abi non-null the ABI this app should be started with. 403aec67dcc02362e4d2f7641c6605405b839bd1bd4Andreas Gampe * @param instructionSet null-ok the instruction set to use. 4042eacd06bfb82b33dfcbccafbcfc0bf1218484bb5jgu * @param appDataDir null-ok the data directory of the app. 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param zygoteArgs Additional arguments to supply to the zygote process. 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4073f9dd287b99340efaaa257759e71a8f81b2ed113Jeff Brown * @return An object that describes the result of the attempt to start the process. 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws RuntimeException on fatal start failure 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@hide} 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4123f9dd287b99340efaaa257759e71a8f81b2ed113Jeff Brown public static final ProcessStartResult start(final String processClass, 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final String niceName, 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int uid, int gid, int[] gids, 4155b1ada2562c17921adf6a62ea62bcb445160983cJeff Sharkey int debugFlags, int mountExternal, 4165b1ada2562c17921adf6a62ea62bcb445160983cJeff Sharkey int targetSdkVersion, 41783d9eda9c2c411e3480c52f01e192bf3c86be8e9Stephen Smalley String seInfo, 418ff0c470833b2cb4130a30895093630242d5f238dRamin Zaghi String abi, 419aec67dcc02362e4d2f7641c6605405b839bd1bd4Andreas Gampe String instructionSet, 4202eacd06bfb82b33dfcbccafbcfc0bf1218484bb5jgu String appDataDir, 42110e89712863f5b91a2982dc1783fbdfe39c1485dJeff Brown String[] zygoteArgs) { 42296b49848e7784bc4b40ffd01e2524461e1efcab7Robert Sesek return zygoteProcess.start(processClass, niceName, uid, gid, gids, 4234444dcd0adc7e035cca030b90ed91f0cff9a772bNarayan Kamath debugFlags, mountExternal, targetSdkVersion, seInfo, 4242eacd06bfb82b33dfcbccafbcfc0bf1218484bb5jgu abi, instructionSet, appDataDir, zygoteArgs); 4254444dcd0adc7e035cca030b90ed91f0cff9a772bNarayan Kamath } 4264444dcd0adc7e035cca030b90ed91f0cff9a772bNarayan Kamath 427ded209843616a98e6f97db0d1784f6d630cbd5e9Robert Sesek /** @hide */ 428ded209843616a98e6f97db0d1784f6d630cbd5e9Robert Sesek public static final ProcessStartResult startWebView(final String processClass, 429ded209843616a98e6f97db0d1784f6d630cbd5e9Robert Sesek final String niceName, 430ded209843616a98e6f97db0d1784f6d630cbd5e9Robert Sesek int uid, int gid, int[] gids, 431ded209843616a98e6f97db0d1784f6d630cbd5e9Robert Sesek int debugFlags, int mountExternal, 432ded209843616a98e6f97db0d1784f6d630cbd5e9Robert Sesek int targetSdkVersion, 433ded209843616a98e6f97db0d1784f6d630cbd5e9Robert Sesek String seInfo, 434ded209843616a98e6f97db0d1784f6d630cbd5e9Robert Sesek String abi, 435ded209843616a98e6f97db0d1784f6d630cbd5e9Robert Sesek String instructionSet, 436ded209843616a98e6f97db0d1784f6d630cbd5e9Robert Sesek String appDataDir, 437ded209843616a98e6f97db0d1784f6d630cbd5e9Robert Sesek String[] zygoteArgs) { 438ded209843616a98e6f97db0d1784f6d630cbd5e9Robert Sesek return WebViewZygote.getProcess().start(processClass, niceName, uid, gid, gids, 439ded209843616a98e6f97db0d1784f6d630cbd5e9Robert Sesek debugFlags, mountExternal, targetSdkVersion, seInfo, 440ded209843616a98e6f97db0d1784f6d630cbd5e9Robert Sesek abi, instructionSet, appDataDir, zygoteArgs); 441ded209843616a98e6f97db0d1784f6d630cbd5e9Robert Sesek } 442ded209843616a98e6f97db0d1784f6d630cbd5e9Robert Sesek 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns elapsed milliseconds of the time this process has run. 4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns the number of milliseconds this process has return. 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final native long getElapsedCpuTime(); 448ee0cdce2a80f8cc033378134e37092bc467c0f38Andreas Gampe 449ee0cdce2a80f8cc033378134e37092bc467c0f38Andreas Gampe /** 450d98885c128e7045da244098d82751da6e792d677Dianne Hackborn * Return the {@link SystemClock#elapsedRealtime()} at which this process was started. 451d98885c128e7045da244098d82751da6e792d677Dianne Hackborn */ 452d98885c128e7045da244098d82751da6e792d677Dianne Hackborn public static final long getStartElapsedRealtime() { 453d98885c128e7045da244098d82751da6e792d677Dianne Hackborn return sStartElapsedRealtime; 454d98885c128e7045da244098d82751da6e792d677Dianne Hackborn } 455d98885c128e7045da244098d82751da6e792d677Dianne Hackborn 456d98885c128e7045da244098d82751da6e792d677Dianne Hackborn /** 457d98885c128e7045da244098d82751da6e792d677Dianne Hackborn * Return the {@link SystemClock#uptimeMillis()} at which this process was started. 458d98885c128e7045da244098d82751da6e792d677Dianne Hackborn */ 459d98885c128e7045da244098d82751da6e792d677Dianne Hackborn public static final long getStartUptimeMillis() { 460d98885c128e7045da244098d82751da6e792d677Dianne Hackborn return sStartUptimeMillis; 461d98885c128e7045da244098d82751da6e792d677Dianne Hackborn } 462d98885c128e7045da244098d82751da6e792d677Dianne Hackborn 463d98885c128e7045da244098d82751da6e792d677Dianne Hackborn /** @hide */ 464d98885c128e7045da244098d82751da6e792d677Dianne Hackborn public static final void setStartTimes(long elapsedRealtime, long uptimeMillis) { 465d98885c128e7045da244098d82751da6e792d677Dianne Hackborn sStartElapsedRealtime = elapsedRealtime; 466d98885c128e7045da244098d82751da6e792d677Dianne Hackborn sStartUptimeMillis = uptimeMillis; 467d98885c128e7045da244098d82751da6e792d677Dianne Hackborn } 468d98885c128e7045da244098d82751da6e792d677Dianne Hackborn 469d98885c128e7045da244098d82751da6e792d677Dianne Hackborn /** 470ee0cdce2a80f8cc033378134e37092bc467c0f38Andreas Gampe * Returns true if the current process is a 64-bit runtime. 471ee0cdce2a80f8cc033378134e37092bc467c0f38Andreas Gampe */ 472ee0cdce2a80f8cc033378134e37092bc467c0f38Andreas Gampe public static final boolean is64Bit() { 473ee0cdce2a80f8cc033378134e37092bc467c0f38Andreas Gampe return VMRuntime.getRuntime().is64Bit(); 474ee0cdce2a80f8cc033378134e37092bc467c0f38Andreas Gampe } 475ee0cdce2a80f8cc033378134e37092bc467c0f38Andreas Gampe 4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the identifier of this process, which can be used with 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #killProcess} and {@link #sendSignal}. 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 480406ec15647b7664cadadde41dbaaa10e298c582bJeff Hao public static final int myPid() { 48134385d352da19805ae948215e2edbeedd16b7941Elliott Hughes return Os.getpid(); 482406ec15647b7664cadadde41dbaaa10e298c582bJeff Hao } 4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 48580b12fcaaec458377d966803c3a61504f0897ea1Romain Guy * Returns the identifier of this process' parent. 48680b12fcaaec458377d966803c3a61504f0897ea1Romain Guy * @hide 48780b12fcaaec458377d966803c3a61504f0897ea1Romain Guy */ 4882a805f930463ece57bc0d0fd8dee7f5d50681b22Elliott Hughes public static final int myPpid() { 48934385d352da19805ae948215e2edbeedd16b7941Elliott Hughes return Os.getppid(); 4902a805f930463ece57bc0d0fd8dee7f5d50681b22Elliott Hughes } 49180b12fcaaec458377d966803c3a61504f0897ea1Romain Guy 49280b12fcaaec458377d966803c3a61504f0897ea1Romain Guy /** 4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the identifier of the calling thread, which be used with 4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #setThreadPriority(int, int)}. 4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4966d4b1e24aef5b74b40de4d8f6e63c21874ce8e3aElliott Hughes public static final int myTid() { 49734385d352da19805ae948215e2edbeedd16b7941Elliott Hughes return Os.gettid(); 4986d4b1e24aef5b74b40de4d8f6e63c21874ce8e3aElliott Hughes } 4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5017d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn * Returns the identifier of this process's uid. This is the kernel uid 5027d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn * that the process is running under, which is the identity of its 5037d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn * app-specific sandbox. It is different from {@link #myUserHandle} in that 5047d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn * a uid identifies a specific app sandbox in a specific user. 5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 506406ec15647b7664cadadde41dbaaa10e298c582bJeff Hao public static final int myUid() { 50734385d352da19805ae948215e2edbeedd16b7941Elliott Hughes return Os.getuid(); 508406ec15647b7664cadadde41dbaaa10e298c582bJeff Hao } 5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 51179af1dd54c16cde063152922b42c96d72ae9eca8Dianne Hackborn * Returns this process's user handle. This is the 5127d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn * user the process is running under. It is distinct from 5137d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn * {@link #myUid()} in that a particular user will have multiple 5147d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn * distinct apps running under it each with their own uid. 5157d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn */ 51602cb6e773b323a0d54b21f43460a23f668b7727cFyodor Kupolov public static UserHandle myUserHandle() { 51702cb6e773b323a0d54b21f43460a23f668b7727cFyodor Kupolov return UserHandle.of(UserHandle.getUserId(myUid())); 5187d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn } 5197d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn 5207d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn /** 52148aa86bd0b30815f4c02561f713bd33b032ef2b7Jeff Davidson * Returns whether the given uid belongs to an application. 52248aa86bd0b30815f4c02561f713bd33b032ef2b7Jeff Davidson * @param uid A kernel uid. 52348aa86bd0b30815f4c02561f713bd33b032ef2b7Jeff Davidson * @return Whether the uid corresponds to an application sandbox running in 52448aa86bd0b30815f4c02561f713bd33b032ef2b7Jeff Davidson * a specific user. 52548aa86bd0b30815f4c02561f713bd33b032ef2b7Jeff Davidson */ 52648aa86bd0b30815f4c02561f713bd33b032ef2b7Jeff Davidson public static boolean isApplicationUid(int uid) { 52748aa86bd0b30815f4c02561f713bd33b032ef2b7Jeff Davidson return UserHandle.isApp(uid); 52848aa86bd0b30815f4c02561f713bd33b032ef2b7Jeff Davidson } 52948aa86bd0b30815f4c02561f713bd33b032ef2b7Jeff Davidson 53048aa86bd0b30815f4c02561f713bd33b032ef2b7Jeff Davidson /** 531a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn * Returns whether the current process is in an isolated sandbox. 532a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn * @hide 533a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn */ 534a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn public static final boolean isIsolated() { 5359527b223a9d4a4d149bb005afc77148dbeeff785Jeff Sharkey return isIsolated(myUid()); 5369527b223a9d4a4d149bb005afc77148dbeeff785Jeff Sharkey } 5379527b223a9d4a4d149bb005afc77148dbeeff785Jeff Sharkey 5389527b223a9d4a4d149bb005afc77148dbeeff785Jeff Sharkey /** {@hide} */ 5399527b223a9d4a4d149bb005afc77148dbeeff785Jeff Sharkey public static final boolean isIsolated(int uid) { 5409527b223a9d4a4d149bb005afc77148dbeeff785Jeff Sharkey uid = UserHandle.getAppId(uid); 541a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn return uid >= FIRST_ISOLATED_UID && uid <= LAST_ISOLATED_UID; 542a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn } 543a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn 544a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn /** 5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the UID assigned to a particular user name, or -1 if there is 5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * none. If the given string consists of only numbers, it is converted 5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * directly to a uid. 5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final native int getUidForName(String name); 5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the GID assigned to a particular user name, or -1 if there is 5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * none. If the given string consists of only numbers, it is converted 5549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * directly to a gid. 5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final native int getGidForName(String name); 557819f928f6a9dc3fdf408236f33e17f03a7dfed2cAmith Yamasani 558819f928f6a9dc3fdf408236f33e17f03a7dfed2cAmith Yamasani /** 559819f928f6a9dc3fdf408236f33e17f03a7dfed2cAmith Yamasani * Returns a uid for a currently running process. 560819f928f6a9dc3fdf408236f33e17f03a7dfed2cAmith Yamasani * @param pid the process id 561819f928f6a9dc3fdf408236f33e17f03a7dfed2cAmith Yamasani * @return the uid of the process, or -1 if the process is not running. 562819f928f6a9dc3fdf408236f33e17f03a7dfed2cAmith Yamasani * @hide pending API council review 563819f928f6a9dc3fdf408236f33e17f03a7dfed2cAmith Yamasani */ 564819f928f6a9dc3fdf408236f33e17f03a7dfed2cAmith Yamasani public static final int getUidForPid(int pid) { 565819f928f6a9dc3fdf408236f33e17f03a7dfed2cAmith Yamasani String[] procStatusLabels = { "Uid:" }; 566819f928f6a9dc3fdf408236f33e17f03a7dfed2cAmith Yamasani long[] procStatusValues = new long[1]; 567819f928f6a9dc3fdf408236f33e17f03a7dfed2cAmith Yamasani procStatusValues[0] = -1; 568819f928f6a9dc3fdf408236f33e17f03a7dfed2cAmith Yamasani Process.readProcLines("/proc/" + pid + "/status", procStatusLabels, procStatusValues); 569819f928f6a9dc3fdf408236f33e17f03a7dfed2cAmith Yamasani return (int) procStatusValues[0]; 570819f928f6a9dc3fdf408236f33e17f03a7dfed2cAmith Yamasani } 571819f928f6a9dc3fdf408236f33e17f03a7dfed2cAmith Yamasani 5729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 573ebed7d6e35f7f960e6e6add2b8ab7c7a31a511c3Jeff Brown * Returns the parent process id for a currently running process. 574ebed7d6e35f7f960e6e6add2b8ab7c7a31a511c3Jeff Brown * @param pid the process id 575ebed7d6e35f7f960e6e6add2b8ab7c7a31a511c3Jeff Brown * @return the parent process id of the process, or -1 if the process is not running. 576ebed7d6e35f7f960e6e6add2b8ab7c7a31a511c3Jeff Brown * @hide 577ebed7d6e35f7f960e6e6add2b8ab7c7a31a511c3Jeff Brown */ 578ebed7d6e35f7f960e6e6add2b8ab7c7a31a511c3Jeff Brown public static final int getParentPid(int pid) { 579ebed7d6e35f7f960e6e6add2b8ab7c7a31a511c3Jeff Brown String[] procStatusLabels = { "PPid:" }; 580ebed7d6e35f7f960e6e6add2b8ab7c7a31a511c3Jeff Brown long[] procStatusValues = new long[1]; 581ebed7d6e35f7f960e6e6add2b8ab7c7a31a511c3Jeff Brown procStatusValues[0] = -1; 582ebed7d6e35f7f960e6e6add2b8ab7c7a31a511c3Jeff Brown Process.readProcLines("/proc/" + pid + "/status", procStatusLabels, procStatusValues); 583ebed7d6e35f7f960e6e6add2b8ab7c7a31a511c3Jeff Brown return (int) procStatusValues[0]; 584ebed7d6e35f7f960e6e6add2b8ab7c7a31a511c3Jeff Brown } 585ebed7d6e35f7f960e6e6add2b8ab7c7a31a511c3Jeff Brown 586ebed7d6e35f7f960e6e6add2b8ab7c7a31a511c3Jeff Brown /** 58707b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten * Returns the thread group leader id for a currently running thread. 58807b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten * @param tid the thread id 58907b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten * @return the thread group leader id of the thread, or -1 if the thread is not running. 59007b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten * This is same as what getpid(2) would return if called by tid. 59107b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten * @hide 59207b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten */ 59307b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten public static final int getThreadGroupLeader(int tid) { 59407b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten String[] procStatusLabels = { "Tgid:" }; 59507b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten long[] procStatusValues = new long[1]; 59607b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten procStatusValues[0] = -1; 59707b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten Process.readProcLines("/proc/" + tid + "/status", procStatusLabels, procStatusValues); 59807b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten return (int) procStatusValues[0]; 59907b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten } 60007b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten 60107b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten /** 6029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the priority of a thread, based on Linux priorities. 6039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 6049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param tid The identifier of the thread/process to change. 6059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param priority A Linux priority level, from -20 for highest scheduling 6069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * priority to 19 for lowest scheduling priority. 6079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 6089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws IllegalArgumentException Throws IllegalArgumentException if 6099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <var>tid</var> does not exist. 6109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws SecurityException Throws SecurityException if your process does 6119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not have permission to modify the given thread, or to use the given 6129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * priority. 6139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final native void setThreadPriority(int tid, int priority) 6159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throws IllegalArgumentException, SecurityException; 616e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat 617e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat /** 618160edb3645f8b7012bab70ae6e6e8c4a5733082bChristopher Tate * Call with 'false' to cause future calls to {@link #setThreadPriority(int)} to 619160edb3645f8b7012bab70ae6e6e8c4a5733082bChristopher Tate * throw an exception if passed a background-level thread priority. This is only 620160edb3645f8b7012bab70ae6e6e8c4a5733082bChristopher Tate * effective if the JNI layer is built with GUARD_THREAD_PRIORITY defined to 1. 621160edb3645f8b7012bab70ae6e6e8c4a5733082bChristopher Tate * 622160edb3645f8b7012bab70ae6e6e8c4a5733082bChristopher Tate * @hide 623160edb3645f8b7012bab70ae6e6e8c4a5733082bChristopher Tate */ 624160edb3645f8b7012bab70ae6e6e8c4a5733082bChristopher Tate public static final native void setCanSelfBackground(boolean backgroundOk); 625160edb3645f8b7012bab70ae6e6e8c4a5733082bChristopher Tate 626160edb3645f8b7012bab70ae6e6e8c4a5733082bChristopher Tate /** 627e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat * Sets the scheduling group for a thread. 628e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat * @hide 629f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * @param tid The identifier of the thread to change. 630f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * @param group The target group for this thread from THREAD_GROUP_*. 631e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat * 632e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat * @throws IllegalArgumentException Throws IllegalArgumentException if 633e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat * <var>tid</var> does not exist. 634e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat * @throws SecurityException Throws SecurityException if your process does 635e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat * not have permission to modify the given thread, or to use the given 636e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat * priority. 637f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * If the thread is a thread group leader, that is it's gettid() == getpid(), 638f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * then the other threads in the same thread group are _not_ affected. 639e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat */ 640e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat public static final native void setThreadGroup(int tid, int group) 641e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat throws IllegalArgumentException, SecurityException; 642f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten 6433e458241d9930465a20a861ecb42744355d48e48San Mehat /** 6443e458241d9930465a20a861ecb42744355d48e48San Mehat * Sets the scheduling group for a process and all child threads 6453e458241d9930465a20a861ecb42744355d48e48San Mehat * @hide 646f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * @param pid The identifier of the process to change. 647f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * @param group The target group for this process from THREAD_GROUP_*. 6483e458241d9930465a20a861ecb42744355d48e48San Mehat * 6493e458241d9930465a20a861ecb42744355d48e48San Mehat * @throws IllegalArgumentException Throws IllegalArgumentException if 6503e458241d9930465a20a861ecb42744355d48e48San Mehat * <var>tid</var> does not exist. 6513e458241d9930465a20a861ecb42744355d48e48San Mehat * @throws SecurityException Throws SecurityException if your process does 6523e458241d9930465a20a861ecb42744355d48e48San Mehat * not have permission to modify the given thread, or to use the given 6533e458241d9930465a20a861ecb42744355d48e48San Mehat * priority. 654f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * 655f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * group == THREAD_GROUP_DEFAULT means to move all non-background priority 656f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * threads to the foreground scheduling group, but to leave background 657f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * priority threads alone. group == THREAD_GROUP_BG_NONINTERACTIVE moves all 658f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * threads, regardless of priority, to the background scheduling group. 659f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * group == THREAD_GROUP_FOREGROUND is not allowed. 6603e458241d9930465a20a861ecb42744355d48e48San Mehat */ 6613e458241d9930465a20a861ecb42744355d48e48San Mehat public static final native void setProcessGroup(int pid, int group) 6623e458241d9930465a20a861ecb42744355d48e48San Mehat throws IllegalArgumentException, SecurityException; 6639e57c414f39e1a31349bc215635fdcfaf1902ceeJeff Sharkey 6649e57c414f39e1a31349bc215635fdcfaf1902ceeJeff Sharkey /** 6659e57c414f39e1a31349bc215635fdcfaf1902ceeJeff Sharkey * Return the scheduling group of requested process. 6669e57c414f39e1a31349bc215635fdcfaf1902ceeJeff Sharkey * 6679e57c414f39e1a31349bc215635fdcfaf1902ceeJeff Sharkey * @hide 6689e57c414f39e1a31349bc215635fdcfaf1902ceeJeff Sharkey */ 6699e57c414f39e1a31349bc215635fdcfaf1902ceeJeff Sharkey public static final native int getProcessGroup(int pid) 6709e57c414f39e1a31349bc215635fdcfaf1902ceeJeff Sharkey throws IllegalArgumentException, SecurityException; 6719e57c414f39e1a31349bc215635fdcfaf1902ceeJeff Sharkey 6729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 673cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen * On some devices, the foreground process may have one or more CPU 674cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen * cores exclusively reserved for it. This method can be used to 675cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen * retrieve which cores that are (if any), so the calling process 676cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen * can then use sched_setaffinity() to lock a thread to these cores. 677cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen * Note that the calling process must currently be running in the 678cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen * foreground for this method to return any cores. 679cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen * 680cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen * The CPU core(s) exclusively reserved for the foreground process will 681cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen * stay reserved for as long as the process stays in the foreground. 682cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen * 683cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen * As soon as a process leaves the foreground, those CPU cores will 684cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen * no longer be reserved for it, and will most likely be reserved for 685cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen * the new foreground process. It's not necessary to change the affinity 686cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen * of your process when it leaves the foreground (if you had previously 687cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen * set it to use a reserved core); the OS will automatically take care 688cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen * of resetting the affinity at that point. 689cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen * 690cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen * @return an array of integers, indicating the CPU cores exclusively 691cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen * reserved for this process. The array will have length zero if no 692cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen * CPU cores are exclusively reserved for this process at this point 693cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen * in time. 694cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen */ 695cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen public static final native int[] getExclusiveCores(); 696cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen 697cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen /** 6989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the priority of the calling thread, based on Linux priorities. See 6999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #setThreadPriority(int, int)} for more information. 7009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param priority A Linux priority level, from -20 for highest scheduling 7029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * priority to 19 for lowest scheduling priority. 7039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws IllegalArgumentException Throws IllegalArgumentException if 7059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <var>tid</var> does not exist. 7069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws SecurityException Throws SecurityException if your process does 7079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not have permission to modify the given thread, or to use the given 7089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * priority. 7099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #setThreadPriority(int, int) 7119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final native void setThreadPriority(int priority) 7139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throws IllegalArgumentException, SecurityException; 7149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the current priority of a thread, based on Linux priorities. 7179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param tid The identifier of the thread/process to change. 7199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns the current priority, as a Linux priority level, 7219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * from -20 for highest scheduling priority to 19 for lowest scheduling 7229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * priority. 7239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws IllegalArgumentException Throws IllegalArgumentException if 7259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <var>tid</var> does not exist. 7269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final native int getThreadPriority(int tid) 7289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throws IllegalArgumentException; 7299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7316793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten * Set the scheduling policy and priority of a thread, based on Linux. 7326793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten * 7336793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten * @param tid The identifier of the thread/process to change. 7346793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten * @param policy A Linux scheduling policy such as SCHED_OTHER etc. 7356793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten * @param priority A Linux priority level in a range appropriate for the given policy. 7366793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten * 7376793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten * @throws IllegalArgumentException Throws IllegalArgumentException if 7386793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten * <var>tid</var> does not exist, or if <var>priority</var> is out of range for the policy. 7396793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten * @throws SecurityException Throws SecurityException if your process does 7406793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten * not have permission to modify the given thread, or to use the given 7416793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten * scheduling policy or priority. 7426793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten * 7436793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten * {@hide} 7446793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten */ 7456793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten public static final native void setThreadScheduler(int tid, int policy, int priority) 7466793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten throws IllegalArgumentException; 7476793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten 7486793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten /** 7499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Determine whether the current environment supports multiple processes. 7509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns true if the system can run in multiple processes, else 7529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * false if everything is running in a single process. 75310e89712863f5b91a2982dc1783fbdfe39c1485dJeff Brown * 75410e89712863f5b91a2982dc1783fbdfe39c1485dJeff Brown * @deprecated This method always returns true. Do not use. 7559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 75610e89712863f5b91a2982dc1783fbdfe39c1485dJeff Brown @Deprecated 75710e89712863f5b91a2982dc1783fbdfe39c1485dJeff Brown public static final boolean supportsProcesses() { 75810e89712863f5b91a2982dc1783fbdfe39c1485dJeff Brown return true; 75910e89712863f5b91a2982dc1783fbdfe39c1485dJeff Brown } 7609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7625534ba91ac0a0c9af822af62bcf92e2c5a8d6ec8Rom Lemarchand * Adjust the swappiness level for a process. 7635534ba91ac0a0c9af822af62bcf92e2c5a8d6ec8Rom Lemarchand * 7645534ba91ac0a0c9af822af62bcf92e2c5a8d6ec8Rom Lemarchand * @param pid The process identifier to set. 7655534ba91ac0a0c9af822af62bcf92e2c5a8d6ec8Rom Lemarchand * @param is_increased Whether swappiness should be increased or default. 7665534ba91ac0a0c9af822af62bcf92e2c5a8d6ec8Rom Lemarchand * 7675534ba91ac0a0c9af822af62bcf92e2c5a8d6ec8Rom Lemarchand * @return Returns true if the underlying system supports this 7685534ba91ac0a0c9af822af62bcf92e2c5a8d6ec8Rom Lemarchand * feature, else false. 7695534ba91ac0a0c9af822af62bcf92e2c5a8d6ec8Rom Lemarchand * 7705534ba91ac0a0c9af822af62bcf92e2c5a8d6ec8Rom Lemarchand * {@hide} 7715534ba91ac0a0c9af822af62bcf92e2c5a8d6ec8Rom Lemarchand */ 7725534ba91ac0a0c9af822af62bcf92e2c5a8d6ec8Rom Lemarchand public static final native boolean setSwappiness(int pid, boolean is_increased); 7735534ba91ac0a0c9af822af62bcf92e2c5a8d6ec8Rom Lemarchand 7745534ba91ac0a0c9af822af62bcf92e2c5a8d6ec8Rom Lemarchand /** 7759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Change this process's argv[0] parameter. This can be useful to show 7769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * more descriptive information in things like the 'ps' command. 7779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param text The new name of this process. 7799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@hide} 7819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final native void setArgV0(String text); 7839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Kill the process with the given PID. 7869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Note that, though this API allows us to request to 7879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * kill any process based on its PID, the kernel will 7889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * still impose standard restrictions on which PIDs you 7899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * are actually able to kill. Typically this means only 7909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the process running the caller's packages/application 7919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and any additional processes created by that app; packages 7929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * sharing a common UID will also be able to kill each 7939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * other's processes. 7949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final void killProcess(int pid) { 7969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sendSignal(pid, SIGNAL_KILL); 7979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** @hide */ 8009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final native int setUid(int uid); 8019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** @hide */ 8039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final native int setGid(int uid); 8049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Send a signal to the given process. 8079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pid The pid of the target process. 8099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param signal The signal to send. 8109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final native void sendSignal(int pid, int signal); 8129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 813906497c574d45d8dfd295b16dece0d0bc32c0895Dianne Hackborn /** 814906497c574d45d8dfd295b16dece0d0bc32c0895Dianne Hackborn * @hide 815906497c574d45d8dfd295b16dece0d0bc32c0895Dianne Hackborn * Private impl for avoiding a log message... DO NOT USE without doing 816906497c574d45d8dfd295b16dece0d0bc32c0895Dianne Hackborn * your own log, or the Android Illuminati will find you some night and 817906497c574d45d8dfd295b16dece0d0bc32c0895Dianne Hackborn * beat you up. 818906497c574d45d8dfd295b16dece0d0bc32c0895Dianne Hackborn */ 819906497c574d45d8dfd295b16dece0d0bc32c0895Dianne Hackborn public static final void killProcessQuiet(int pid) { 820906497c574d45d8dfd295b16dece0d0bc32c0895Dianne Hackborn sendSignalQuiet(pid, SIGNAL_KILL); 821906497c574d45d8dfd295b16dece0d0bc32c0895Dianne Hackborn } 822906497c574d45d8dfd295b16dece0d0bc32c0895Dianne Hackborn 823906497c574d45d8dfd295b16dece0d0bc32c0895Dianne Hackborn /** 824906497c574d45d8dfd295b16dece0d0bc32c0895Dianne Hackborn * @hide 825906497c574d45d8dfd295b16dece0d0bc32c0895Dianne Hackborn * Private impl for avoiding a log message... DO NOT USE without doing 826906497c574d45d8dfd295b16dece0d0bc32c0895Dianne Hackborn * your own log, or the Android Illuminati will find you some night and 827906497c574d45d8dfd295b16dece0d0bc32c0895Dianne Hackborn * beat you up. 828906497c574d45d8dfd295b16dece0d0bc32c0895Dianne Hackborn */ 829906497c574d45d8dfd295b16dece0d0bc32c0895Dianne Hackborn public static final native void sendSignalQuiet(int pid, int signal); 830906497c574d45d8dfd295b16dece0d0bc32c0895Dianne Hackborn 8319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** @hide */ 8320bca96bcbfe559f9330a01f723c5c9cba51ec05aMarco Nelissen public static final native long getFreeMemory(); 8339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** @hide */ 83559325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn public static final native long getTotalMemory(); 83659325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn 83759325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn /** @hide */ 8389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final native void readProcLines(String path, 8399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String[] reqFields, long[] outSizes); 8409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** @hide */ 8429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final native int[] getPids(String path, int[] lastArray); 8439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** @hide */ 8459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int PROC_TERM_MASK = 0xff; 8469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** @hide */ 8479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int PROC_ZERO_TERM = 0; 8489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** @hide */ 8499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int PROC_SPACE_TERM = (int)' '; 8509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** @hide */ 851c64edde69d18498fb2954f71a546357b07ab996aEvan Millar public static final int PROC_TAB_TERM = (int)'\t'; 852c64edde69d18498fb2954f71a546357b07ab996aEvan Millar /** @hide */ 8539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int PROC_COMBINE = 0x100; 8549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** @hide */ 8559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int PROC_PARENS = 0x200; 8569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** @hide */ 85713ac041b9f21043bc7c848a743be618bfd7a67e9Dianne Hackborn public static final int PROC_QUOTES = 0x400; 85813ac041b9f21043bc7c848a743be618bfd7a67e9Dianne Hackborn /** @hide */ 8594de5a3ac6655f76b67af38712ae5aeb6d7c15938Dianne Hackborn public static final int PROC_CHAR = 0x800; 8604de5a3ac6655f76b67af38712ae5aeb6d7c15938Dianne Hackborn /** @hide */ 8619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int PROC_OUT_STRING = 0x1000; 8629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** @hide */ 8639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int PROC_OUT_LONG = 0x2000; 8649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** @hide */ 8659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int PROC_OUT_FLOAT = 0x4000; 8669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** @hide */ 8689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final native boolean readProcFile(String file, int[] format, 8699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String[] outStrings, long[] outLongs, float[] outFloats); 870c64edde69d18498fb2954f71a546357b07ab996aEvan Millar 871c64edde69d18498fb2954f71a546357b07ab996aEvan Millar /** @hide */ 872c64edde69d18498fb2954f71a546357b07ab996aEvan Millar public static final native boolean parseProcLine(byte[] buffer, int startIndex, 873c64edde69d18498fb2954f71a546357b07ab996aEvan Millar int endIndex, int[] format, String[] outStrings, long[] outLongs, float[] outFloats); 8749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 875f72467ad9843bf5d4b75fb308386e77ebb5c3447Dianne Hackborn /** @hide */ 876f72467ad9843bf5d4b75fb308386e77ebb5c3447Dianne Hackborn public static final native int[] getPidsForCommands(String[] cmds); 877f72467ad9843bf5d4b75fb308386e77ebb5c3447Dianne Hackborn 8789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the total Pss value for a given process, in bytes. 8809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pid the process to the Pss for 8829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the total Pss value for the given process in bytes, 8839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * or -1 if the value cannot be determined 8849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 8859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final native long getPss(int pid); 8873f9dd287b99340efaaa257759e71a8f81b2ed113Jeff Brown 8883f9dd287b99340efaaa257759e71a8f81b2ed113Jeff Brown /** 8893f9dd287b99340efaaa257759e71a8f81b2ed113Jeff Brown * Specifies the outcome of having started a process. 8903f9dd287b99340efaaa257759e71a8f81b2ed113Jeff Brown * @hide 8913f9dd287b99340efaaa257759e71a8f81b2ed113Jeff Brown */ 8923f9dd287b99340efaaa257759e71a8f81b2ed113Jeff Brown public static final class ProcessStartResult { 8933f9dd287b99340efaaa257759e71a8f81b2ed113Jeff Brown /** 8943f9dd287b99340efaaa257759e71a8f81b2ed113Jeff Brown * The PID of the newly started process. 8953f9dd287b99340efaaa257759e71a8f81b2ed113Jeff Brown * Always >= 0. (If the start failed, an exception will have been thrown instead.) 8963f9dd287b99340efaaa257759e71a8f81b2ed113Jeff Brown */ 8973f9dd287b99340efaaa257759e71a8f81b2ed113Jeff Brown public int pid; 8983f9dd287b99340efaaa257759e71a8f81b2ed113Jeff Brown 8993f9dd287b99340efaaa257759e71a8f81b2ed113Jeff Brown /** 9003f9dd287b99340efaaa257759e71a8f81b2ed113Jeff Brown * True if the process was started with a wrapper attached. 9013f9dd287b99340efaaa257759e71a8f81b2ed113Jeff Brown */ 9023f9dd287b99340efaaa257759e71a8f81b2ed113Jeff Brown public boolean usingWrapper; 9033f9dd287b99340efaaa257759e71a8f81b2ed113Jeff Brown } 9040769e550011d8f8a19e333efe1706ef0e6cc6a5fColin Cross 9050769e550011d8f8a19e333efe1706ef0e6cc6a5fColin Cross /** 9060769e550011d8f8a19e333efe1706ef0e6cc6a5fColin Cross * Kill all processes in a process group started for the given 9070769e550011d8f8a19e333efe1706ef0e6cc6a5fColin Cross * pid. 9080769e550011d8f8a19e333efe1706ef0e6cc6a5fColin Cross * @hide 9090769e550011d8f8a19e333efe1706ef0e6cc6a5fColin Cross */ 9100769e550011d8f8a19e333efe1706ef0e6cc6a5fColin Cross public static final native int killProcessGroup(int uid, int pid); 9110769e550011d8f8a19e333efe1706ef0e6cc6a5fColin Cross 9120769e550011d8f8a19e333efe1706ef0e6cc6a5fColin Cross /** 9130769e550011d8f8a19e333efe1706ef0e6cc6a5fColin Cross * Remove all process groups. Expected to be called when ActivityManager 9140769e550011d8f8a19e333efe1706ef0e6cc6a5fColin Cross * is restarted. 9150769e550011d8f8a19e333efe1706ef0e6cc6a5fColin Cross * @hide 9160769e550011d8f8a19e333efe1706ef0e6cc6a5fColin Cross */ 9170769e550011d8f8a19e333efe1706ef0e6cc6a5fColin Cross public static final native void removeAllProcessGroups(); 9189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 919