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 191b15d13243d7e7f672713f21f0c46d88c3c067a2Srinath Sridharanimport android.annotation.TestApi; 2034385d352da19805ae948215e2edbeedd16b7941Elliott Hughesimport android.system.Os; 21b89970e0fb11b71592e10570d387eac3bbb6f6d6Tim Murrayimport android.system.OsConstants; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Log; 23ded209843616a98e6f97db0d1784f6d630cbd5e9Robert Sesekimport android.webkit.WebViewZygote; 24ee0cdce2a80f8cc033378134e37092bc467c0f38Andreas Gampeimport dalvik.system.VMRuntime; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Tools for managing OS processes. 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class Process { 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String LOG_TAG = "Process"; 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3264cd907af99ce9702e8975a657ee437c2626f8b5Narayan Kamath /** 3364cd907af99ce9702e8975a657ee437c2626f8b5Narayan Kamath * @hide for internal use only. 3464cd907af99ce9702e8975a657ee437c2626f8b5Narayan Kamath */ 3564cd907af99ce9702e8975a657ee437c2626f8b5Narayan Kamath public static final String ZYGOTE_SOCKET = "zygote"; 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3764cd907af99ce9702e8975a657ee437c2626f8b5Narayan Kamath /** 3864cd907af99ce9702e8975a657ee437c2626f8b5Narayan Kamath * @hide for internal use only. 3964cd907af99ce9702e8975a657ee437c2626f8b5Narayan Kamath */ 4064cd907af99ce9702e8975a657ee437c2626f8b5Narayan Kamath public static final String SECONDARY_ZYGOTE_SOCKET = "zygote_secondary"; 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 431cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey * Defines the root UID. 441cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey * @hide 451cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey */ 461cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey public static final int ROOT_UID = 0; 471cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey 481cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey /** 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Defines the UID/GID under which system code runs. 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int SYSTEM_UID = 1000; 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Defines the UID/GID under which the telephony code runs. 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int PHONE_UID = 1001; 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 59854060af30f928c0a65591e9c8314ae17056e6b8Dianne Hackborn * Defines the UID/GID for the user shell. 60854060af30f928c0a65591e9c8314ae17056e6b8Dianne Hackborn * @hide 61854060af30f928c0a65591e9c8314ae17056e6b8Dianne Hackborn */ 62854060af30f928c0a65591e9c8314ae17056e6b8Dianne Hackborn public static final int SHELL_UID = 2000; 63854060af30f928c0a65591e9c8314ae17056e6b8Dianne Hackborn 64854060af30f928c0a65591e9c8314ae17056e6b8Dianne Hackborn /** 65d42685d5de1dbd6d75b48d42418f370adaa4daefMike Lockwood * Defines the UID/GID for the log group. 66d42685d5de1dbd6d75b48d42418f370adaa4daefMike Lockwood * @hide 67d42685d5de1dbd6d75b48d42418f370adaa4daefMike Lockwood */ 68d42685d5de1dbd6d75b48d42418f370adaa4daefMike Lockwood public static final int LOG_UID = 1007; 69d42685d5de1dbd6d75b48d42418f370adaa4daefMike Lockwood 70d42685d5de1dbd6d75b48d42418f370adaa4daefMike Lockwood /** 71d158214511a3c04753de04fa6389e46d33135c38Amith Yamasani * Defines the UID/GID for the WIFI supplicant process. 72d158214511a3c04753de04fa6389e46d33135c38Amith Yamasani * @hide 73d158214511a3c04753de04fa6389e46d33135c38Amith Yamasani */ 74d158214511a3c04753de04fa6389e46d33135c38Amith Yamasani public static final int WIFI_UID = 1010; 75d158214511a3c04753de04fa6389e46d33135c38Amith Yamasani 76d158214511a3c04753de04fa6389e46d33135c38Amith Yamasani /** 778b7d1b4d4a33e9429c5cedaa6317efcaad95da68Glenn Kasten * Defines the UID/GID for the mediaserver process. 788b7d1b4d4a33e9429c5cedaa6317efcaad95da68Glenn Kasten * @hide 798b7d1b4d4a33e9429c5cedaa6317efcaad95da68Glenn Kasten */ 808b7d1b4d4a33e9429c5cedaa6317efcaad95da68Glenn Kasten public static final int MEDIA_UID = 1013; 818b7d1b4d4a33e9429c5cedaa6317efcaad95da68Glenn Kasten 828b7d1b4d4a33e9429c5cedaa6317efcaad95da68Glenn Kasten /** 835294a2fc2f401cd248a4bc3f0f9ee1e2854f4e9aJeff Sharkey * Defines the UID/GID for the DRM process. 845294a2fc2f401cd248a4bc3f0f9ee1e2854f4e9aJeff Sharkey * @hide 855294a2fc2f401cd248a4bc3f0f9ee1e2854f4e9aJeff Sharkey */ 865294a2fc2f401cd248a4bc3f0f9ee1e2854f4e9aJeff Sharkey public static final int DRM_UID = 1019; 875294a2fc2f401cd248a4bc3f0f9ee1e2854f4e9aJeff Sharkey 885294a2fc2f401cd248a4bc3f0f9ee1e2854f4e9aJeff Sharkey /** 8926993b37d525fd64efebd51daec1b4abfebd8a74Kenny Root * Defines the UID/GID for the group that controls VPN services. 9026993b37d525fd64efebd51daec1b4abfebd8a74Kenny Root * @hide 9126993b37d525fd64efebd51daec1b4abfebd8a74Kenny Root */ 9226993b37d525fd64efebd51daec1b4abfebd8a74Kenny Root public static final int VPN_UID = 1016; 9326993b37d525fd64efebd51daec1b4abfebd8a74Kenny Root 9426993b37d525fd64efebd51daec1b4abfebd8a74Kenny Root /** 956ab9bb68bafaa2b9a10924f3a7c3a1d164dda752Janis Danisevskis * Defines the UID/GID for keystore. 966ab9bb68bafaa2b9a10924f3a7c3a1d164dda752Janis Danisevskis * @hide 976ab9bb68bafaa2b9a10924f3a7c3a1d164dda752Janis Danisevskis */ 986ab9bb68bafaa2b9a10924f3a7c3a1d164dda752Janis Danisevskis public static final int KEYSTORE_UID = 1017; 996ab9bb68bafaa2b9a10924f3a7c3a1d164dda752Janis Danisevskis 1006ab9bb68bafaa2b9a10924f3a7c3a1d164dda752Janis Danisevskis /** 101cd0e839a2448deea50f79bddeba782c546b33893Nick Pelly * Defines the UID/GID for the NFC service process. 102cd0e839a2448deea50f79bddeba782c546b33893Nick Pelly * @hide 103cd0e839a2448deea50f79bddeba782c546b33893Nick Pelly */ 104a5cb9f42174a52afbeb7e33dab64282f52f8cedbNick Pelly public static final int NFC_UID = 1027; 105cd0e839a2448deea50f79bddeba782c546b33893Nick Pelly 106cd0e839a2448deea50f79bddeba782c546b33893Nick Pelly /** 1071abb1cb3a8fe17f7866150604c2fd73751da787eJaikumar Ganesh * Defines the UID/GID for the Bluetooth service process. 1081abb1cb3a8fe17f7866150604c2fd73751da787eJaikumar Ganesh * @hide 1091abb1cb3a8fe17f7866150604c2fd73751da787eJaikumar Ganesh */ 1101abb1cb3a8fe17f7866150604c2fd73751da787eJaikumar Ganesh public static final int BLUETOOTH_UID = 1002; 1111abb1cb3a8fe17f7866150604c2fd73751da787eJaikumar Ganesh 1121abb1cb3a8fe17f7866150604c2fd73751da787eJaikumar Ganesh /** 113dcaa10cd361a543cfa93bbb5c53444f437bd07a4Mike Lockwood * Defines the GID for the group that allows write access to the internal media storage. 114dcaa10cd361a543cfa93bbb5c53444f437bd07a4Mike Lockwood * @hide 115dcaa10cd361a543cfa93bbb5c53444f437bd07a4Mike Lockwood */ 116dcaa10cd361a543cfa93bbb5c53444f437bd07a4Mike Lockwood public static final int MEDIA_RW_GID = 1023; 117dcaa10cd361a543cfa93bbb5c53444f437bd07a4Mike Lockwood 118dcaa10cd361a543cfa93bbb5c53444f437bd07a4Mike Lockwood /** 119184a0100abc431fc3d6d8dd1b20212b84958cadaJeff Sharkey * Access to installed package details 120184a0100abc431fc3d6d8dd1b20212b84958cadaJeff Sharkey * @hide 121184a0100abc431fc3d6d8dd1b20212b84958cadaJeff Sharkey */ 122184a0100abc431fc3d6d8dd1b20212b84958cadaJeff Sharkey public static final int PACKAGE_INFO_GID = 1032; 123184a0100abc431fc3d6d8dd1b20212b84958cadaJeff Sharkey 124184a0100abc431fc3d6d8dd1b20212b84958cadaJeff Sharkey /** 12508cfaf672604422dd355d6703aec78f3aa5ee74eTorne (Richard Coles) * Defines the UID/GID for the shared RELRO file updater process. 12608cfaf672604422dd355d6703aec78f3aa5ee74eTorne (Richard Coles) * @hide 12708cfaf672604422dd355d6703aec78f3aa5ee74eTorne (Richard Coles) */ 12808cfaf672604422dd355d6703aec78f3aa5ee74eTorne (Richard Coles) public static final int SHARED_RELRO_UID = 1037; 12908cfaf672604422dd355d6703aec78f3aa5ee74eTorne (Richard Coles) 13008cfaf672604422dd355d6703aec78f3aa5ee74eTorne (Richard Coles) /** 131ed0ea40a41aae8e65bc189efe6b631ca78259383Andy Hung * Defines the UID/GID for the audioserver process. 132ed0ea40a41aae8e65bc189efe6b631ca78259383Andy Hung * @hide 133ed0ea40a41aae8e65bc189efe6b631ca78259383Andy Hung */ 134ed0ea40a41aae8e65bc189efe6b631ca78259383Andy Hung public static final int AUDIOSERVER_UID = 1041; 135ed0ea40a41aae8e65bc189efe6b631ca78259383Andy Hung 136ed0ea40a41aae8e65bc189efe6b631ca78259383Andy Hung /** 13775cade0a5fd5ec432870de9977f81091ab389423Chien-Yu Chen * Defines the UID/GID for the cameraserver process 13875cade0a5fd5ec432870de9977f81091ab389423Chien-Yu Chen * @hide 13975cade0a5fd5ec432870de9977f81091ab389423Chien-Yu Chen */ 140b8b4e85879e93db2ba7821b7fe54710cb6a6de71Chien-Yu Chen public static final int CAMERASERVER_UID = 1047; 14175cade0a5fd5ec432870de9977f81091ab389423Chien-Yu Chen 14275cade0a5fd5ec432870de9977f81091ab389423Chien-Yu Chen /** 143ded209843616a98e6f97db0d1784f6d630cbd5e9Robert Sesek * Defines the UID/GID for the WebView zygote process. 144ded209843616a98e6f97db0d1784f6d630cbd5e9Robert Sesek * @hide 145ded209843616a98e6f97db0d1784f6d630cbd5e9Robert Sesek */ 146ded209843616a98e6f97db0d1784f6d630cbd5e9Robert Sesek public static final int WEBVIEW_ZYGOTE_UID = 1051; 147ded209843616a98e6f97db0d1784f6d630cbd5e9Robert Sesek 148ded209843616a98e6f97db0d1784f6d630cbd5e9Robert Sesek /** 14907c5c6f7f02b0ed1b71647558fabdac15bbc8d24Jeff Sharkey * Defines the UID used for resource tracking for OTA updates. 15007c5c6f7f02b0ed1b71647558fabdac15bbc8d24Jeff Sharkey * @hide 15107c5c6f7f02b0ed1b71647558fabdac15bbc8d24Jeff Sharkey */ 15207c5c6f7f02b0ed1b71647558fabdac15bbc8d24Jeff Sharkey public static final int OTA_UPDATE_UID = 1061; 15307c5c6f7f02b0ed1b71647558fabdac15bbc8d24Jeff Sharkey 15407c5c6f7f02b0ed1b71647558fabdac15bbc8d24Jeff Sharkey /** 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Defines the start of a range of UIDs (and GIDs), going from this 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * number to {@link #LAST_APPLICATION_UID} that are reserved for assigning 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to applications. 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FIRST_APPLICATION_UID = 10000; 160184a0100abc431fc3d6d8dd1b20212b84958cadaJeff Sharkey 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Last of application-specific UIDs starting at 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #FIRST_APPLICATION_UID}. 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 16521fbd1f7da53dc044737803dccddf8099f1fc1e9Dianne Hackborn public static final int LAST_APPLICATION_UID = 19999; 166a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn 167a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn /** 168a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn * First uid used for fully isolated sandboxed processes (with no permissions of their own) 169a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn * @hide 170a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn */ 171a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn public static final int FIRST_ISOLATED_UID = 99000; 172a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn 173a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn /** 174a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn * Last uid used for fully isolated sandboxed processes (with no permissions of their own) 175a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn * @hide 176a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn */ 177a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn public static final int LAST_ISOLATED_UID = 99999; 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 180e66b6890ee59d108ae5c608f6ec8d4ad20cb06a8Robin Lee * Defines the gid shared by all applications running under the same profile. 181e66b6890ee59d108ae5c608f6ec8d4ad20cb06a8Robin Lee * @hide 182e66b6890ee59d108ae5c608f6ec8d4ad20cb06a8Robin Lee */ 183e66b6890ee59d108ae5c608f6ec8d4ad20cb06a8Robin Lee public static final int SHARED_USER_GID = 9997; 184e66b6890ee59d108ae5c608f6ec8d4ad20cb06a8Robin Lee 185e66b6890ee59d108ae5c608f6ec8d4ad20cb06a8Robin Lee /** 186e091f22e226f7177e45e23850670c1ad9b63fd75Kenny Root * First gid for applications to share resources. Used when forward-locking 187e091f22e226f7177e45e23850670c1ad9b63fd75Kenny Root * is enabled but all UserHandles need to be able to read the resources. 188e091f22e226f7177e45e23850670c1ad9b63fd75Kenny Root * @hide 189e091f22e226f7177e45e23850670c1ad9b63fd75Kenny Root */ 190e091f22e226f7177e45e23850670c1ad9b63fd75Kenny Root public static final int FIRST_SHARED_APPLICATION_GID = 50000; 191e091f22e226f7177e45e23850670c1ad9b63fd75Kenny Root 192e091f22e226f7177e45e23850670c1ad9b63fd75Kenny Root /** 193e091f22e226f7177e45e23850670c1ad9b63fd75Kenny Root * Last gid for applications to share resources. Used when forward-locking 194e091f22e226f7177e45e23850670c1ad9b63fd75Kenny Root * is enabled but all UserHandles need to be able to read the resources. 195e091f22e226f7177e45e23850670c1ad9b63fd75Kenny Root * @hide 196e091f22e226f7177e45e23850670c1ad9b63fd75Kenny Root */ 197e091f22e226f7177e45e23850670c1ad9b63fd75Kenny Root public static final int LAST_SHARED_APPLICATION_GID = 59999; 198e091f22e226f7177e45e23850670c1ad9b63fd75Kenny Root 1995eb3eb58acf18dd624c477d5b11b45a23aea6261Jeff Sharkey /** {@hide} */ 2005eb3eb58acf18dd624c477d5b11b45a23aea6261Jeff Sharkey public static final int FIRST_APPLICATION_CACHE_GID = 20000; 2015eb3eb58acf18dd624c477d5b11b45a23aea6261Jeff Sharkey /** {@hide} */ 2025eb3eb58acf18dd624c477d5b11b45a23aea6261Jeff Sharkey public static final int LAST_APPLICATION_CACHE_GID = 29999; 2035eb3eb58acf18dd624c477d5b11b45a23aea6261Jeff Sharkey 204e091f22e226f7177e45e23850670c1ad9b63fd75Kenny Root /** 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Standard priority of application threads. 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use with {@link #setThreadPriority(int)} and 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #setThreadPriority(int, int)}, <b>not</b> with the normal 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link java.lang.Thread} class. 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int THREAD_PRIORITY_DEFAULT = 0; 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * *************************************** 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ** Keep in sync with utils/threads.h ** 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * *************************************** 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Lowest available thread priority. Only for those who really, really 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * don't want to run if anything else is happening. 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use with {@link #setThreadPriority(int)} and 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #setThreadPriority(int, int)}, <b>not</b> with the normal 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link java.lang.Thread} class. 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int THREAD_PRIORITY_LOWEST = 19; 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Standard priority background threads. This gives your thread a slightly 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * lower than normal priority, so that it will have less chance of impacting 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the responsiveness of the user interface. 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use with {@link #setThreadPriority(int)} and 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #setThreadPriority(int, int)}, <b>not</b> with the normal 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link java.lang.Thread} class. 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int THREAD_PRIORITY_BACKGROUND = 10; 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Standard priority of threads that are currently running a user interface 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that the user is interacting with. Applications can not normally 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * change to this priority; the system will automatically adjust your 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * application threads as the user moves through the UI. 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use with {@link #setThreadPriority(int)} and 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #setThreadPriority(int, int)}, <b>not</b> with the normal 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link java.lang.Thread} class. 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int THREAD_PRIORITY_FOREGROUND = -2; 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Standard priority of system display threads, involved in updating 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the user interface. Applications can not 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * normally 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_DISPLAY = -4; 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Standard priority of the most important display threads, for compositing 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the screen and retrieving input events. Applications can not normally 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * change to this priority. 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use with {@link #setThreadPriority(int)} and 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #setThreadPriority(int, int)}, <b>not</b> with the normal 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link java.lang.Thread} class. 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int THREAD_PRIORITY_URGENT_DISPLAY = -8; 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Standard priority of audio threads. Applications can not normally 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * change to this priority. 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use with {@link #setThreadPriority(int)} and 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #setThreadPriority(int, int)}, <b>not</b> with the normal 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link java.lang.Thread} class. 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int THREAD_PRIORITY_AUDIO = -16; 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Standard priority of the most important audio threads. 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Applications can not normally change to this priority. 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Use with {@link #setThreadPriority(int)} and 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #setThreadPriority(int, int)}, <b>not</b> with the normal 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link java.lang.Thread} class. 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int THREAD_PRIORITY_URGENT_AUDIO = -19; 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Minimum increment to make a priority more favorable. 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int THREAD_PRIORITY_MORE_FAVORABLE = -1; 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Minimum increment to make a priority less favorable. 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int THREAD_PRIORITY_LESS_FAVORABLE = +1; 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 296e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat /** 2976793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten * Default scheduling policy 2986793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten * @hide 2996793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten */ 3006793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten public static final int SCHED_OTHER = 0; 3016793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten 3026793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten /** 3036793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten * First-In First-Out scheduling policy 3046793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten * @hide 3056793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten */ 3066793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten public static final int SCHED_FIFO = 1; 3076793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten 3086793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten /** 3096793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten * Round-Robin scheduling policy 3106793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten * @hide 3116793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten */ 3126793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten public static final int SCHED_RR = 2; 3136793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten 3146793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten /** 3156793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten * Batch scheduling policy 3166793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten * @hide 3176793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten */ 3186793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten public static final int SCHED_BATCH = 3; 3196793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten 3206793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten /** 3216793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten * Idle scheduling policy 3226793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten * @hide 3236793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten */ 3246793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten public static final int SCHED_IDLE = 5; 3256793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten 326e535a5827b7b7c7c70f4701d74051c9bb5eb0b98Srinath Sridharan /** 327e535a5827b7b7c7c70f4701d74051c9bb5eb0b98Srinath Sridharan * Reset scheduler choice on fork. 328e535a5827b7b7c7c70f4701d74051c9bb5eb0b98Srinath Sridharan * @hide 329e535a5827b7b7c7c70f4701d74051c9bb5eb0b98Srinath Sridharan */ 330e535a5827b7b7c7c70f4701d74051c9bb5eb0b98Srinath Sridharan public static final int SCHED_RESET_ON_FORK = 0x40000000; 331e535a5827b7b7c7c70f4701d74051c9bb5eb0b98Srinath Sridharan 332f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten // Keep in sync with SP_* constants of enum type SchedPolicy 333f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten // declared in system/core/include/cutils/sched_policy.h, 334f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten // except THREAD_GROUP_DEFAULT does not correspond to any SP_* value. 335f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten 3366793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten /** 337f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * Default thread group - 338f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * has meaning with setProcessGroup() only, cannot be used with setThreadGroup(). 339f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * When used with setProcessGroup(), the group of each thread in the process 340f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * is conditionally changed based on that thread's current priority, as follows: 341f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * threads with priority numerically less than THREAD_PRIORITY_BACKGROUND 342f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * are moved to foreground thread group. All other threads are left unchanged. 343e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat * @hide 344e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat */ 345f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten public static final int THREAD_GROUP_DEFAULT = -1; 346e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat 347e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat /** 348f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * Background thread group - All threads in 349e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat * this group are scheduled with a reduced share of the CPU. 350f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * Value is same as constant SP_BACKGROUND of enum SchedPolicy. 351f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * FIXME rename to THREAD_GROUP_BACKGROUND. 352e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat * @hide 353e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat */ 354f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten public static final int THREAD_GROUP_BG_NONINTERACTIVE = 0; 355e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat 356e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat /** 357f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * Foreground thread group - All threads in 358f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * this group are scheduled with a normal share of the CPU. 359f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * Value is same as constant SP_FOREGROUND of enum SchedPolicy. 360f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * Not used at this level. 361e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat * @hide 362e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat **/ 363f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten private static final int THREAD_GROUP_FOREGROUND = 1; 364e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat 36507b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten /** 36607b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten * System thread group. 36707b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten * @hide 36807b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten **/ 36907b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten public static final int THREAD_GROUP_SYSTEM = 2; 37007b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten 37107b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten /** 37207b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten * Application audio thread group. 37307b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten * @hide 37407b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten **/ 37507b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten public static final int THREAD_GROUP_AUDIO_APP = 3; 37607b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten 37707b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten /** 37807b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten * System audio thread group. 37907b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten * @hide 38007b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten **/ 38107b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten public static final int THREAD_GROUP_AUDIO_SYS = 4; 38207b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten 383ece6a22f00de4ab815588e2f7951203adcd2b9c4Tim Murray /** 384ece6a22f00de4ab815588e2f7951203adcd2b9c4Tim Murray * Thread group for top foreground app. 385ece6a22f00de4ab815588e2f7951203adcd2b9c4Tim Murray * @hide 386ece6a22f00de4ab815588e2f7951203adcd2b9c4Tim Murray **/ 387ece6a22f00de4ab815588e2f7951203adcd2b9c4Tim Murray public static final int THREAD_GROUP_TOP_APP = 5; 388ece6a22f00de4ab815588e2f7951203adcd2b9c4Tim Murray 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int SIGNAL_QUIT = 3; 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int SIGNAL_KILL = 9; 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int SIGNAL_USR1 = 10; 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 393d98885c128e7045da244098d82751da6e792d677Dianne Hackborn private static long sStartElapsedRealtime; 394d98885c128e7045da244098d82751da6e792d677Dianne Hackborn private static long sStartUptimeMillis; 395d98885c128e7045da244098d82751da6e792d677Dianne Hackborn 3964444dcd0adc7e035cca030b90ed91f0cff9a772bNarayan Kamath /** 3978f8d187a78b48109911a800ba5993b645d3015c5Robert Sesek * State associated with the zygote process. 3988f8d187a78b48109911a800ba5993b645d3015c5Robert Sesek * @hide 3994444dcd0adc7e035cca030b90ed91f0cff9a772bNarayan Kamath */ 4008f8d187a78b48109911a800ba5993b645d3015c5Robert Sesek public static final ZygoteProcess zygoteProcess = 4018f8d187a78b48109911a800ba5993b645d3015c5Robert Sesek new ZygoteProcess(ZYGOTE_SOCKET, SECONDARY_ZYGOTE_SOCKET); 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Start a new process. 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>If processes are enabled, a new process is created and the 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * static main() function of a <var>processClass</var> is executed there. 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The process will continue running after this function returns. 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>If processes are not enabled, a new thread in the caller's 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * process is created and main() of <var>processClass</var> called there. 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>The niceName parameter, if not an empty string, is a custom name to 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * give to the process instead of using processClass. This allows you to 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * make easily identifyable processes even if you are using the same base 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <var>processClass</var> to start them. 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 418b8f7c351b97da590a4bd8da3dddbab166f9f789dTamas Berghammer * When invokeWith is not null, the process will be started as a fresh app 4190ca16fa58454b1685afcf8cf49c4b67b59221349Tamas Berghammer * and not a zygote fork. Note that this is only allowed for uid 0 or when 4200ca16fa58454b1685afcf8cf49c4b67b59221349Tamas Berghammer * debugFlags contains DEBUG_ENABLE_DEBUGGER. 421b8f7c351b97da590a4bd8da3dddbab166f9f789dTamas Berghammer * 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param processClass The class to use as the process's main entry 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * point. 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param niceName A more readable name to use for the process. 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param uid The user-id under which the process will run. 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param gid The group-id under which the process will run. 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param gids Additional group-ids associated with the process. 428e1dfcb7ab01fb991079ec1f70f75281a0ca9073eElliott Hughes * @param debugFlags Additional flags. 429e1dfcb7ab01fb991079ec1f70f75281a0ca9073eElliott Hughes * @param targetSdkVersion The target SDK version for the app. 430bd19b9ee305c11d8aa3cbb105bf2d3a6b06389b5Stephen Smalley * @param seInfo null-ok SELinux information for the new process. 431ff0c470833b2cb4130a30895093630242d5f238dRamin Zaghi * @param abi non-null the ABI this app should be started with. 432aec67dcc02362e4d2f7641c6605405b839bd1bd4Andreas Gampe * @param instructionSet null-ok the instruction set to use. 4332eacd06bfb82b33dfcbccafbcfc0bf1218484bb5jgu * @param appDataDir null-ok the data directory of the app. 434b8f7c351b97da590a4bd8da3dddbab166f9f789dTamas Berghammer * @param invokeWith null-ok the command to invoke with. 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param zygoteArgs Additional arguments to supply to the zygote process. 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4373f9dd287b99340efaaa257759e71a8f81b2ed113Jeff Brown * @return An object that describes the result of the attempt to start the process. 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws RuntimeException on fatal start failure 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@hide} 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4423f9dd287b99340efaaa257759e71a8f81b2ed113Jeff Brown public static final ProcessStartResult start(final String processClass, 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final String niceName, 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int uid, int gid, int[] gids, 4455b1ada2562c17921adf6a62ea62bcb445160983cJeff Sharkey int debugFlags, int mountExternal, 4465b1ada2562c17921adf6a62ea62bcb445160983cJeff Sharkey int targetSdkVersion, 44783d9eda9c2c411e3480c52f01e192bf3c86be8e9Stephen Smalley String seInfo, 448ff0c470833b2cb4130a30895093630242d5f238dRamin Zaghi String abi, 449aec67dcc02362e4d2f7641c6605405b839bd1bd4Andreas Gampe String instructionSet, 4502eacd06bfb82b33dfcbccafbcfc0bf1218484bb5jgu String appDataDir, 451b8f7c351b97da590a4bd8da3dddbab166f9f789dTamas Berghammer String invokeWith, 45210e89712863f5b91a2982dc1783fbdfe39c1485dJeff Brown String[] zygoteArgs) { 4538f8d187a78b48109911a800ba5993b645d3015c5Robert Sesek return zygoteProcess.start(processClass, niceName, uid, gid, gids, 4544444dcd0adc7e035cca030b90ed91f0cff9a772bNarayan Kamath debugFlags, mountExternal, targetSdkVersion, seInfo, 455b8f7c351b97da590a4bd8da3dddbab166f9f789dTamas Berghammer abi, instructionSet, appDataDir, invokeWith, zygoteArgs); 4564444dcd0adc7e035cca030b90ed91f0cff9a772bNarayan Kamath } 4574444dcd0adc7e035cca030b90ed91f0cff9a772bNarayan Kamath 458ded209843616a98e6f97db0d1784f6d630cbd5e9Robert Sesek /** @hide */ 459ded209843616a98e6f97db0d1784f6d630cbd5e9Robert Sesek public static final ProcessStartResult startWebView(final String processClass, 460ded209843616a98e6f97db0d1784f6d630cbd5e9Robert Sesek final String niceName, 461ded209843616a98e6f97db0d1784f6d630cbd5e9Robert Sesek int uid, int gid, int[] gids, 462ded209843616a98e6f97db0d1784f6d630cbd5e9Robert Sesek int debugFlags, int mountExternal, 463ded209843616a98e6f97db0d1784f6d630cbd5e9Robert Sesek int targetSdkVersion, 464ded209843616a98e6f97db0d1784f6d630cbd5e9Robert Sesek String seInfo, 465ded209843616a98e6f97db0d1784f6d630cbd5e9Robert Sesek String abi, 466ded209843616a98e6f97db0d1784f6d630cbd5e9Robert Sesek String instructionSet, 467ded209843616a98e6f97db0d1784f6d630cbd5e9Robert Sesek String appDataDir, 468b8f7c351b97da590a4bd8da3dddbab166f9f789dTamas Berghammer String invokeWith, 469ded209843616a98e6f97db0d1784f6d630cbd5e9Robert Sesek String[] zygoteArgs) { 470ded209843616a98e6f97db0d1784f6d630cbd5e9Robert Sesek return WebViewZygote.getProcess().start(processClass, niceName, uid, gid, gids, 471ded209843616a98e6f97db0d1784f6d630cbd5e9Robert Sesek debugFlags, mountExternal, targetSdkVersion, seInfo, 472b8f7c351b97da590a4bd8da3dddbab166f9f789dTamas Berghammer abi, instructionSet, appDataDir, invokeWith, zygoteArgs); 473ded209843616a98e6f97db0d1784f6d630cbd5e9Robert Sesek } 474ded209843616a98e6f97db0d1784f6d630cbd5e9Robert Sesek 4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns elapsed milliseconds of the time this process has run. 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns the number of milliseconds this process has return. 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final native long getElapsedCpuTime(); 480ee0cdce2a80f8cc033378134e37092bc467c0f38Andreas Gampe 481ee0cdce2a80f8cc033378134e37092bc467c0f38Andreas Gampe /** 482d98885c128e7045da244098d82751da6e792d677Dianne Hackborn * Return the {@link SystemClock#elapsedRealtime()} at which this process was started. 483d98885c128e7045da244098d82751da6e792d677Dianne Hackborn */ 484d98885c128e7045da244098d82751da6e792d677Dianne Hackborn public static final long getStartElapsedRealtime() { 485d98885c128e7045da244098d82751da6e792d677Dianne Hackborn return sStartElapsedRealtime; 486d98885c128e7045da244098d82751da6e792d677Dianne Hackborn } 487d98885c128e7045da244098d82751da6e792d677Dianne Hackborn 488d98885c128e7045da244098d82751da6e792d677Dianne Hackborn /** 489d98885c128e7045da244098d82751da6e792d677Dianne Hackborn * Return the {@link SystemClock#uptimeMillis()} at which this process was started. 490d98885c128e7045da244098d82751da6e792d677Dianne Hackborn */ 491d98885c128e7045da244098d82751da6e792d677Dianne Hackborn public static final long getStartUptimeMillis() { 492d98885c128e7045da244098d82751da6e792d677Dianne Hackborn return sStartUptimeMillis; 493d98885c128e7045da244098d82751da6e792d677Dianne Hackborn } 494d98885c128e7045da244098d82751da6e792d677Dianne Hackborn 495d98885c128e7045da244098d82751da6e792d677Dianne Hackborn /** @hide */ 496d98885c128e7045da244098d82751da6e792d677Dianne Hackborn public static final void setStartTimes(long elapsedRealtime, long uptimeMillis) { 497d98885c128e7045da244098d82751da6e792d677Dianne Hackborn sStartElapsedRealtime = elapsedRealtime; 498d98885c128e7045da244098d82751da6e792d677Dianne Hackborn sStartUptimeMillis = uptimeMillis; 499d98885c128e7045da244098d82751da6e792d677Dianne Hackborn } 500d98885c128e7045da244098d82751da6e792d677Dianne Hackborn 501d98885c128e7045da244098d82751da6e792d677Dianne Hackborn /** 502ee0cdce2a80f8cc033378134e37092bc467c0f38Andreas Gampe * Returns true if the current process is a 64-bit runtime. 503ee0cdce2a80f8cc033378134e37092bc467c0f38Andreas Gampe */ 504ee0cdce2a80f8cc033378134e37092bc467c0f38Andreas Gampe public static final boolean is64Bit() { 505ee0cdce2a80f8cc033378134e37092bc467c0f38Andreas Gampe return VMRuntime.getRuntime().is64Bit(); 506ee0cdce2a80f8cc033378134e37092bc467c0f38Andreas Gampe } 507ee0cdce2a80f8cc033378134e37092bc467c0f38Andreas Gampe 5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the identifier of this process, which can be used with 5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #killProcess} and {@link #sendSignal}. 5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 512406ec15647b7664cadadde41dbaaa10e298c582bJeff Hao public static final int myPid() { 51334385d352da19805ae948215e2edbeedd16b7941Elliott Hughes return Os.getpid(); 514406ec15647b7664cadadde41dbaaa10e298c582bJeff Hao } 5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 51780b12fcaaec458377d966803c3a61504f0897ea1Romain Guy * Returns the identifier of this process' parent. 51880b12fcaaec458377d966803c3a61504f0897ea1Romain Guy * @hide 51980b12fcaaec458377d966803c3a61504f0897ea1Romain Guy */ 5202a805f930463ece57bc0d0fd8dee7f5d50681b22Elliott Hughes public static final int myPpid() { 52134385d352da19805ae948215e2edbeedd16b7941Elliott Hughes return Os.getppid(); 5222a805f930463ece57bc0d0fd8dee7f5d50681b22Elliott Hughes } 52380b12fcaaec458377d966803c3a61504f0897ea1Romain Guy 52480b12fcaaec458377d966803c3a61504f0897ea1Romain Guy /** 5259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the identifier of the calling thread, which be used with 5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #setThreadPriority(int, int)}. 5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5286d4b1e24aef5b74b40de4d8f6e63c21874ce8e3aElliott Hughes public static final int myTid() { 52934385d352da19805ae948215e2edbeedd16b7941Elliott Hughes return Os.gettid(); 5306d4b1e24aef5b74b40de4d8f6e63c21874ce8e3aElliott Hughes } 5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5337d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn * Returns the identifier of this process's uid. This is the kernel uid 5347d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn * that the process is running under, which is the identity of its 5357d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn * app-specific sandbox. It is different from {@link #myUserHandle} in that 5367d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn * a uid identifies a specific app sandbox in a specific user. 5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 538406ec15647b7664cadadde41dbaaa10e298c582bJeff Hao public static final int myUid() { 53934385d352da19805ae948215e2edbeedd16b7941Elliott Hughes return Os.getuid(); 540406ec15647b7664cadadde41dbaaa10e298c582bJeff Hao } 5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 54379af1dd54c16cde063152922b42c96d72ae9eca8Dianne Hackborn * Returns this process's user handle. This is the 5447d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn * user the process is running under. It is distinct from 5457d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn * {@link #myUid()} in that a particular user will have multiple 5467d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn * distinct apps running under it each with their own uid. 5477d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn */ 54802cb6e773b323a0d54b21f43460a23f668b7727cFyodor Kupolov public static UserHandle myUserHandle() { 54902cb6e773b323a0d54b21f43460a23f668b7727cFyodor Kupolov return UserHandle.of(UserHandle.getUserId(myUid())); 5507d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn } 5517d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn 5527d19e0242faac8017033dabb872cdf1542fa184cDianne Hackborn /** 55348aa86bd0b30815f4c02561f713bd33b032ef2b7Jeff Davidson * Returns whether the given uid belongs to an application. 55448aa86bd0b30815f4c02561f713bd33b032ef2b7Jeff Davidson * @param uid A kernel uid. 55548aa86bd0b30815f4c02561f713bd33b032ef2b7Jeff Davidson * @return Whether the uid corresponds to an application sandbox running in 55648aa86bd0b30815f4c02561f713bd33b032ef2b7Jeff Davidson * a specific user. 55748aa86bd0b30815f4c02561f713bd33b032ef2b7Jeff Davidson */ 55848aa86bd0b30815f4c02561f713bd33b032ef2b7Jeff Davidson public static boolean isApplicationUid(int uid) { 55948aa86bd0b30815f4c02561f713bd33b032ef2b7Jeff Davidson return UserHandle.isApp(uid); 56048aa86bd0b30815f4c02561f713bd33b032ef2b7Jeff Davidson } 56148aa86bd0b30815f4c02561f713bd33b032ef2b7Jeff Davidson 56248aa86bd0b30815f4c02561f713bd33b032ef2b7Jeff Davidson /** 563a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn * Returns whether the current process is in an isolated sandbox. 564a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn * @hide 565a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn */ 566a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn public static final boolean isIsolated() { 5679527b223a9d4a4d149bb005afc77148dbeeff785Jeff Sharkey return isIsolated(myUid()); 5689527b223a9d4a4d149bb005afc77148dbeeff785Jeff Sharkey } 5699527b223a9d4a4d149bb005afc77148dbeeff785Jeff Sharkey 5709527b223a9d4a4d149bb005afc77148dbeeff785Jeff Sharkey /** {@hide} */ 5719527b223a9d4a4d149bb005afc77148dbeeff785Jeff Sharkey public static final boolean isIsolated(int uid) { 5729527b223a9d4a4d149bb005afc77148dbeeff785Jeff Sharkey uid = UserHandle.getAppId(uid); 573a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn return uid >= FIRST_ISOLATED_UID && uid <= LAST_ISOLATED_UID; 574a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn } 575a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn 576a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn /** 5779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the UID assigned to a particular user name, or -1 if there is 5789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * none. If the given string consists of only numbers, it is converted 5799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * directly to a uid. 5809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final native int getUidForName(String name); 5829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the GID assigned to a particular user name, or -1 if there is 5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * none. If the given string consists of only numbers, it is converted 5869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * directly to a gid. 5879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final native int getGidForName(String name); 589819f928f6a9dc3fdf408236f33e17f03a7dfed2cAmith Yamasani 590819f928f6a9dc3fdf408236f33e17f03a7dfed2cAmith Yamasani /** 591819f928f6a9dc3fdf408236f33e17f03a7dfed2cAmith Yamasani * Returns a uid for a currently running process. 592819f928f6a9dc3fdf408236f33e17f03a7dfed2cAmith Yamasani * @param pid the process id 593819f928f6a9dc3fdf408236f33e17f03a7dfed2cAmith Yamasani * @return the uid of the process, or -1 if the process is not running. 594819f928f6a9dc3fdf408236f33e17f03a7dfed2cAmith Yamasani * @hide pending API council review 595819f928f6a9dc3fdf408236f33e17f03a7dfed2cAmith Yamasani */ 596819f928f6a9dc3fdf408236f33e17f03a7dfed2cAmith Yamasani public static final int getUidForPid(int pid) { 597819f928f6a9dc3fdf408236f33e17f03a7dfed2cAmith Yamasani String[] procStatusLabels = { "Uid:" }; 598819f928f6a9dc3fdf408236f33e17f03a7dfed2cAmith Yamasani long[] procStatusValues = new long[1]; 599819f928f6a9dc3fdf408236f33e17f03a7dfed2cAmith Yamasani procStatusValues[0] = -1; 600819f928f6a9dc3fdf408236f33e17f03a7dfed2cAmith Yamasani Process.readProcLines("/proc/" + pid + "/status", procStatusLabels, procStatusValues); 601819f928f6a9dc3fdf408236f33e17f03a7dfed2cAmith Yamasani return (int) procStatusValues[0]; 602819f928f6a9dc3fdf408236f33e17f03a7dfed2cAmith Yamasani } 603819f928f6a9dc3fdf408236f33e17f03a7dfed2cAmith Yamasani 6049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 605ebed7d6e35f7f960e6e6add2b8ab7c7a31a511c3Jeff Brown * Returns the parent process id for a currently running process. 606ebed7d6e35f7f960e6e6add2b8ab7c7a31a511c3Jeff Brown * @param pid the process id 607ebed7d6e35f7f960e6e6add2b8ab7c7a31a511c3Jeff Brown * @return the parent process id of the process, or -1 if the process is not running. 608ebed7d6e35f7f960e6e6add2b8ab7c7a31a511c3Jeff Brown * @hide 609ebed7d6e35f7f960e6e6add2b8ab7c7a31a511c3Jeff Brown */ 610ebed7d6e35f7f960e6e6add2b8ab7c7a31a511c3Jeff Brown public static final int getParentPid(int pid) { 611ebed7d6e35f7f960e6e6add2b8ab7c7a31a511c3Jeff Brown String[] procStatusLabels = { "PPid:" }; 612ebed7d6e35f7f960e6e6add2b8ab7c7a31a511c3Jeff Brown long[] procStatusValues = new long[1]; 613ebed7d6e35f7f960e6e6add2b8ab7c7a31a511c3Jeff Brown procStatusValues[0] = -1; 614ebed7d6e35f7f960e6e6add2b8ab7c7a31a511c3Jeff Brown Process.readProcLines("/proc/" + pid + "/status", procStatusLabels, procStatusValues); 615ebed7d6e35f7f960e6e6add2b8ab7c7a31a511c3Jeff Brown return (int) procStatusValues[0]; 616ebed7d6e35f7f960e6e6add2b8ab7c7a31a511c3Jeff Brown } 617ebed7d6e35f7f960e6e6add2b8ab7c7a31a511c3Jeff Brown 618ebed7d6e35f7f960e6e6add2b8ab7c7a31a511c3Jeff Brown /** 61907b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten * Returns the thread group leader id for a currently running thread. 62007b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten * @param tid the thread id 62107b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten * @return the thread group leader id of the thread, or -1 if the thread is not running. 62207b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten * This is same as what getpid(2) would return if called by tid. 62307b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten * @hide 62407b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten */ 62507b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten public static final int getThreadGroupLeader(int tid) { 62607b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten String[] procStatusLabels = { "Tgid:" }; 62707b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten long[] procStatusValues = new long[1]; 62807b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten procStatusValues[0] = -1; 62907b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten Process.readProcLines("/proc/" + tid + "/status", procStatusLabels, procStatusValues); 63007b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten return (int) procStatusValues[0]; 63107b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten } 63207b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten 63307b0465095bd9ab3412caefa4fcacbdc3825c64bGlenn Kasten /** 6349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the priority of a thread, based on Linux priorities. 6359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 6369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param tid The identifier of the thread/process to change. 6379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param priority A Linux priority level, from -20 for highest scheduling 6389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * priority to 19 for lowest scheduling priority. 6399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 6409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws IllegalArgumentException Throws IllegalArgumentException if 6419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <var>tid</var> does not exist. 6429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws SecurityException Throws SecurityException if your process does 6439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not have permission to modify the given thread, or to use the given 6449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * priority. 6459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final native void setThreadPriority(int tid, int priority) 6479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throws IllegalArgumentException, SecurityException; 648e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat 649e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat /** 650160edb3645f8b7012bab70ae6e6e8c4a5733082bChristopher Tate * Call with 'false' to cause future calls to {@link #setThreadPriority(int)} to 651160edb3645f8b7012bab70ae6e6e8c4a5733082bChristopher Tate * throw an exception if passed a background-level thread priority. This is only 652160edb3645f8b7012bab70ae6e6e8c4a5733082bChristopher Tate * effective if the JNI layer is built with GUARD_THREAD_PRIORITY defined to 1. 653160edb3645f8b7012bab70ae6e6e8c4a5733082bChristopher Tate * 654160edb3645f8b7012bab70ae6e6e8c4a5733082bChristopher Tate * @hide 655160edb3645f8b7012bab70ae6e6e8c4a5733082bChristopher Tate */ 656160edb3645f8b7012bab70ae6e6e8c4a5733082bChristopher Tate public static final native void setCanSelfBackground(boolean backgroundOk); 657160edb3645f8b7012bab70ae6e6e8c4a5733082bChristopher Tate 658160edb3645f8b7012bab70ae6e6e8c4a5733082bChristopher Tate /** 659e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat * Sets the scheduling group for a thread. 660e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat * @hide 661f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * @param tid The identifier of the thread to change. 662f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * @param group The target group for this thread from THREAD_GROUP_*. 6632d314e15c9f0b2efc817b6111d808248a546f48cJoel Fernandes * 664e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat * @throws IllegalArgumentException Throws IllegalArgumentException if 665e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat * <var>tid</var> does not exist. 666e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat * @throws SecurityException Throws SecurityException if your process does 667e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat * not have permission to modify the given thread, or to use the given 668e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat * priority. 669f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * If the thread is a thread group leader, that is it's gettid() == getpid(), 670f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * then the other threads in the same thread group are _not_ affected. 6714074ad01e898605c64a80a8cb14c10bdbedf1bdbTim Murray * 6724074ad01e898605c64a80a8cb14c10bdbedf1bdbTim Murray * Does not set cpuset for some historical reason, just calls 6734074ad01e898605c64a80a8cb14c10bdbedf1bdbTim Murray * libcutils::set_sched_policy(). 674e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat */ 675e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat public static final native void setThreadGroup(int tid, int group) 676e9d376b801b7890b1ef5006ed55de4208e64bb63San Mehat throws IllegalArgumentException, SecurityException; 677f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten 6783e458241d9930465a20a861ecb42744355d48e48San Mehat /** 6792d314e15c9f0b2efc817b6111d808248a546f48cJoel Fernandes * Sets the scheduling group and the corresponding cpuset group 6802d314e15c9f0b2efc817b6111d808248a546f48cJoel Fernandes * @hide 6812d314e15c9f0b2efc817b6111d808248a546f48cJoel Fernandes * @param tid The identifier of the thread to change. 6822d314e15c9f0b2efc817b6111d808248a546f48cJoel Fernandes * @param group The target group for this thread from THREAD_GROUP_*. 6832d314e15c9f0b2efc817b6111d808248a546f48cJoel Fernandes * 6842d314e15c9f0b2efc817b6111d808248a546f48cJoel Fernandes * @throws IllegalArgumentException Throws IllegalArgumentException if 6852d314e15c9f0b2efc817b6111d808248a546f48cJoel Fernandes * <var>tid</var> does not exist. 6862d314e15c9f0b2efc817b6111d808248a546f48cJoel Fernandes * @throws SecurityException Throws SecurityException if your process does 6872d314e15c9f0b2efc817b6111d808248a546f48cJoel Fernandes * not have permission to modify the given thread, or to use the given 6882d314e15c9f0b2efc817b6111d808248a546f48cJoel Fernandes * priority. 6892d314e15c9f0b2efc817b6111d808248a546f48cJoel Fernandes */ 6902d314e15c9f0b2efc817b6111d808248a546f48cJoel Fernandes public static final native void setThreadGroupAndCpuset(int tid, int group) 6912d314e15c9f0b2efc817b6111d808248a546f48cJoel Fernandes throws IllegalArgumentException, SecurityException; 6922d314e15c9f0b2efc817b6111d808248a546f48cJoel Fernandes 6932d314e15c9f0b2efc817b6111d808248a546f48cJoel Fernandes /** 6943e458241d9930465a20a861ecb42744355d48e48San Mehat * Sets the scheduling group for a process and all child threads 6953e458241d9930465a20a861ecb42744355d48e48San Mehat * @hide 696f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * @param pid The identifier of the process to change. 697f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * @param group The target group for this process from THREAD_GROUP_*. 6983e458241d9930465a20a861ecb42744355d48e48San Mehat * 6993e458241d9930465a20a861ecb42744355d48e48San Mehat * @throws IllegalArgumentException Throws IllegalArgumentException if 7003e458241d9930465a20a861ecb42744355d48e48San Mehat * <var>tid</var> does not exist. 7013e458241d9930465a20a861ecb42744355d48e48San Mehat * @throws SecurityException Throws SecurityException if your process does 7023e458241d9930465a20a861ecb42744355d48e48San Mehat * not have permission to modify the given thread, or to use the given 7033e458241d9930465a20a861ecb42744355d48e48San Mehat * priority. 704f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * 705f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * group == THREAD_GROUP_DEFAULT means to move all non-background priority 706f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * threads to the foreground scheduling group, but to leave background 707f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * priority threads alone. group == THREAD_GROUP_BG_NONINTERACTIVE moves all 708f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * threads, regardless of priority, to the background scheduling group. 709f1b56449f58963e4f0473d5e26961f68c31759f4Glenn Kasten * group == THREAD_GROUP_FOREGROUND is not allowed. 7104074ad01e898605c64a80a8cb14c10bdbedf1bdbTim Murray * 7114074ad01e898605c64a80a8cb14c10bdbedf1bdbTim Murray * Always sets cpusets. 7123e458241d9930465a20a861ecb42744355d48e48San Mehat */ 7133e458241d9930465a20a861ecb42744355d48e48San Mehat public static final native void setProcessGroup(int pid, int group) 7143e458241d9930465a20a861ecb42744355d48e48San Mehat throws IllegalArgumentException, SecurityException; 7159e57c414f39e1a31349bc215635fdcfaf1902ceeJeff Sharkey 7169e57c414f39e1a31349bc215635fdcfaf1902ceeJeff Sharkey /** 7179e57c414f39e1a31349bc215635fdcfaf1902ceeJeff Sharkey * Return the scheduling group of requested process. 7189e57c414f39e1a31349bc215635fdcfaf1902ceeJeff Sharkey * 7199e57c414f39e1a31349bc215635fdcfaf1902ceeJeff Sharkey * @hide 7209e57c414f39e1a31349bc215635fdcfaf1902ceeJeff Sharkey */ 7219e57c414f39e1a31349bc215635fdcfaf1902ceeJeff Sharkey public static final native int getProcessGroup(int pid) 7229e57c414f39e1a31349bc215635fdcfaf1902ceeJeff Sharkey throws IllegalArgumentException, SecurityException; 7239e57c414f39e1a31349bc215635fdcfaf1902ceeJeff Sharkey 7249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 725cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen * On some devices, the foreground process may have one or more CPU 726cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen * cores exclusively reserved for it. This method can be used to 727cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen * retrieve which cores that are (if any), so the calling process 728cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen * can then use sched_setaffinity() to lock a thread to these cores. 729cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen * Note that the calling process must currently be running in the 730cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen * foreground for this method to return any cores. 731cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen * 732cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen * The CPU core(s) exclusively reserved for the foreground process will 733cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen * stay reserved for as long as the process stays in the foreground. 734cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen * 735cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen * As soon as a process leaves the foreground, those CPU cores will 736cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen * no longer be reserved for it, and will most likely be reserved for 737cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen * the new foreground process. It's not necessary to change the affinity 738cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen * of your process when it leaves the foreground (if you had previously 739cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen * set it to use a reserved core); the OS will automatically take care 740cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen * of resetting the affinity at that point. 741cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen * 742cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen * @return an array of integers, indicating the CPU cores exclusively 743cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen * reserved for this process. The array will have length zero if no 744cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen * CPU cores are exclusively reserved for this process at this point 745cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen * in time. 746cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen */ 747cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen public static final native int[] getExclusiveCores(); 748cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen 749cd4bdf3eb91c1cc2757d32a86fc90745d0dff990Martijn Coenen /** 7509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the priority of the calling thread, based on Linux priorities. See 7519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link #setThreadPriority(int, int)} for more information. 7529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param priority A Linux priority level, from -20 for highest scheduling 7549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * priority to 19 for lowest scheduling priority. 7559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws IllegalArgumentException Throws IllegalArgumentException if 7579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <var>tid</var> does not exist. 7589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws SecurityException Throws SecurityException if your process does 7599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not have permission to modify the given thread, or to use the given 7609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * priority. 7619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #setThreadPriority(int, int) 7639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final native void setThreadPriority(int priority) 7659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throws IllegalArgumentException, SecurityException; 7669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the current priority of a thread, based on Linux priorities. 7699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param tid The identifier of the thread/process to change. 7719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns the current priority, as a Linux priority level, 7739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * from -20 for highest scheduling priority to 19 for lowest scheduling 7749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * priority. 7759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws IllegalArgumentException Throws IllegalArgumentException if 7779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <var>tid</var> does not exist. 7789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final native int getThreadPriority(int tid) 7809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throws IllegalArgumentException; 7819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7831b15d13243d7e7f672713f21f0c46d88c3c067a2Srinath Sridharan * Return the current scheduling policy of a thread, based on Linux. 7841b15d13243d7e7f672713f21f0c46d88c3c067a2Srinath Sridharan * 7851b15d13243d7e7f672713f21f0c46d88c3c067a2Srinath Sridharan * @param tid The identifier of the thread/process to get the scheduling policy. 7861b15d13243d7e7f672713f21f0c46d88c3c067a2Srinath Sridharan * 7871b15d13243d7e7f672713f21f0c46d88c3c067a2Srinath Sridharan * @throws IllegalArgumentException Throws IllegalArgumentException if 7881b15d13243d7e7f672713f21f0c46d88c3c067a2Srinath Sridharan * <var>tid</var> does not exist, or if <var>priority</var> is out of range for the policy. 7891b15d13243d7e7f672713f21f0c46d88c3c067a2Srinath Sridharan * @throws SecurityException Throws SecurityException if your process does 7901b15d13243d7e7f672713f21f0c46d88c3c067a2Srinath Sridharan * not have permission to modify the given thread, or to use the given 7911b15d13243d7e7f672713f21f0c46d88c3c067a2Srinath Sridharan * scheduling policy or priority. 7921b15d13243d7e7f672713f21f0c46d88c3c067a2Srinath Sridharan * 7931b15d13243d7e7f672713f21f0c46d88c3c067a2Srinath Sridharan * {@hide} 7941b15d13243d7e7f672713f21f0c46d88c3c067a2Srinath Sridharan */ 7951b15d13243d7e7f672713f21f0c46d88c3c067a2Srinath Sridharan 7961b15d13243d7e7f672713f21f0c46d88c3c067a2Srinath Sridharan @TestApi 7971b15d13243d7e7f672713f21f0c46d88c3c067a2Srinath Sridharan public static final native int getThreadScheduler(int tid) 7981b15d13243d7e7f672713f21f0c46d88c3c067a2Srinath Sridharan throws IllegalArgumentException; 7991b15d13243d7e7f672713f21f0c46d88c3c067a2Srinath Sridharan 8001b15d13243d7e7f672713f21f0c46d88c3c067a2Srinath Sridharan /** 8016793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten * Set the scheduling policy and priority of a thread, based on Linux. 8026793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten * 8036793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten * @param tid The identifier of the thread/process to change. 8046793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten * @param policy A Linux scheduling policy such as SCHED_OTHER etc. 8056793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten * @param priority A Linux priority level in a range appropriate for the given policy. 8066793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten * 8076793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten * @throws IllegalArgumentException Throws IllegalArgumentException if 8086793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten * <var>tid</var> does not exist, or if <var>priority</var> is out of range for the policy. 8096793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten * @throws SecurityException Throws SecurityException if your process does 8106793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten * not have permission to modify the given thread, or to use the given 8116793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten * scheduling policy or priority. 8126793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten * 8136793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten * {@hide} 8146793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten */ 8151b15d13243d7e7f672713f21f0c46d88c3c067a2Srinath Sridharan 8166793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten public static final native void setThreadScheduler(int tid, int policy, int priority) 8176793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten throws IllegalArgumentException; 8186793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten 8196793ac943afeb16642f477c43ddfd27e498db37bGlenn Kasten /** 8209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Determine whether the current environment supports multiple processes. 8219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return Returns true if the system can run in multiple processes, else 8239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * false if everything is running in a single process. 82410e89712863f5b91a2982dc1783fbdfe39c1485dJeff Brown * 82510e89712863f5b91a2982dc1783fbdfe39c1485dJeff Brown * @deprecated This method always returns true. Do not use. 8269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 82710e89712863f5b91a2982dc1783fbdfe39c1485dJeff Brown @Deprecated 82810e89712863f5b91a2982dc1783fbdfe39c1485dJeff Brown public static final boolean supportsProcesses() { 82910e89712863f5b91a2982dc1783fbdfe39c1485dJeff Brown return true; 83010e89712863f5b91a2982dc1783fbdfe39c1485dJeff Brown } 8319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8335534ba91ac0a0c9af822af62bcf92e2c5a8d6ec8Rom Lemarchand * Adjust the swappiness level for a process. 8345534ba91ac0a0c9af822af62bcf92e2c5a8d6ec8Rom Lemarchand * 8355534ba91ac0a0c9af822af62bcf92e2c5a8d6ec8Rom Lemarchand * @param pid The process identifier to set. 8365534ba91ac0a0c9af822af62bcf92e2c5a8d6ec8Rom Lemarchand * @param is_increased Whether swappiness should be increased or default. 8375534ba91ac0a0c9af822af62bcf92e2c5a8d6ec8Rom Lemarchand * 8385534ba91ac0a0c9af822af62bcf92e2c5a8d6ec8Rom Lemarchand * @return Returns true if the underlying system supports this 8395534ba91ac0a0c9af822af62bcf92e2c5a8d6ec8Rom Lemarchand * feature, else false. 8405534ba91ac0a0c9af822af62bcf92e2c5a8d6ec8Rom Lemarchand * 8415534ba91ac0a0c9af822af62bcf92e2c5a8d6ec8Rom Lemarchand * {@hide} 8425534ba91ac0a0c9af822af62bcf92e2c5a8d6ec8Rom Lemarchand */ 8435534ba91ac0a0c9af822af62bcf92e2c5a8d6ec8Rom Lemarchand public static final native boolean setSwappiness(int pid, boolean is_increased); 8445534ba91ac0a0c9af822af62bcf92e2c5a8d6ec8Rom Lemarchand 8455534ba91ac0a0c9af822af62bcf92e2c5a8d6ec8Rom Lemarchand /** 8469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Change this process's argv[0] parameter. This can be useful to show 8479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * more descriptive information in things like the 'ps' command. 8489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param text The new name of this process. 8509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@hide} 8529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final native void setArgV0(String text); 8549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Kill the process with the given PID. 8579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Note that, though this API allows us to request to 8589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * kill any process based on its PID, the kernel will 8599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * still impose standard restrictions on which PIDs you 8609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * are actually able to kill. Typically this means only 8619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the process running the caller's packages/application 8629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and any additional processes created by that app; packages 8639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * sharing a common UID will also be able to kill each 8649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * other's processes. 8659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final void killProcess(int pid) { 8679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sendSignal(pid, SIGNAL_KILL); 8689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** @hide */ 8719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final native int setUid(int uid); 8729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** @hide */ 8749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final native int setGid(int uid); 8759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Send a signal to the given process. 8789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pid The pid of the target process. 8809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param signal The signal to send. 8819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final native void sendSignal(int pid, int signal); 8839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 884906497c574d45d8dfd295b16dece0d0bc32c0895Dianne Hackborn /** 885906497c574d45d8dfd295b16dece0d0bc32c0895Dianne Hackborn * @hide 886906497c574d45d8dfd295b16dece0d0bc32c0895Dianne Hackborn * Private impl for avoiding a log message... DO NOT USE without doing 887906497c574d45d8dfd295b16dece0d0bc32c0895Dianne Hackborn * your own log, or the Android Illuminati will find you some night and 888906497c574d45d8dfd295b16dece0d0bc32c0895Dianne Hackborn * beat you up. 889906497c574d45d8dfd295b16dece0d0bc32c0895Dianne Hackborn */ 890906497c574d45d8dfd295b16dece0d0bc32c0895Dianne Hackborn public static final void killProcessQuiet(int pid) { 891906497c574d45d8dfd295b16dece0d0bc32c0895Dianne Hackborn sendSignalQuiet(pid, SIGNAL_KILL); 892906497c574d45d8dfd295b16dece0d0bc32c0895Dianne Hackborn } 893906497c574d45d8dfd295b16dece0d0bc32c0895Dianne Hackborn 894906497c574d45d8dfd295b16dece0d0bc32c0895Dianne Hackborn /** 895906497c574d45d8dfd295b16dece0d0bc32c0895Dianne Hackborn * @hide 896906497c574d45d8dfd295b16dece0d0bc32c0895Dianne Hackborn * Private impl for avoiding a log message... DO NOT USE without doing 897906497c574d45d8dfd295b16dece0d0bc32c0895Dianne Hackborn * your own log, or the Android Illuminati will find you some night and 898906497c574d45d8dfd295b16dece0d0bc32c0895Dianne Hackborn * beat you up. 899906497c574d45d8dfd295b16dece0d0bc32c0895Dianne Hackborn */ 900906497c574d45d8dfd295b16dece0d0bc32c0895Dianne Hackborn public static final native void sendSignalQuiet(int pid, int signal); 901906497c574d45d8dfd295b16dece0d0bc32c0895Dianne Hackborn 9029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** @hide */ 9030bca96bcbfe559f9330a01f723c5c9cba51ec05aMarco Nelissen public static final native long getFreeMemory(); 9049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** @hide */ 90659325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn public static final native long getTotalMemory(); 90759325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn 90859325eb31f25704bb88c348160bb69e7c1aa3b48Dianne Hackborn /** @hide */ 9099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final native void readProcLines(String path, 9109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String[] reqFields, long[] outSizes); 9119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** @hide */ 9139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final native int[] getPids(String path, int[] lastArray); 9149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** @hide */ 9169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int PROC_TERM_MASK = 0xff; 9179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** @hide */ 9189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int PROC_ZERO_TERM = 0; 9199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** @hide */ 9209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int PROC_SPACE_TERM = (int)' '; 9219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** @hide */ 922c64edde69d18498fb2954f71a546357b07ab996aEvan Millar public static final int PROC_TAB_TERM = (int)'\t'; 923c64edde69d18498fb2954f71a546357b07ab996aEvan Millar /** @hide */ 9249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int PROC_COMBINE = 0x100; 9259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** @hide */ 9269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int PROC_PARENS = 0x200; 9279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** @hide */ 92813ac041b9f21043bc7c848a743be618bfd7a67e9Dianne Hackborn public static final int PROC_QUOTES = 0x400; 92913ac041b9f21043bc7c848a743be618bfd7a67e9Dianne Hackborn /** @hide */ 9304de5a3ac6655f76b67af38712ae5aeb6d7c15938Dianne Hackborn public static final int PROC_CHAR = 0x800; 9314de5a3ac6655f76b67af38712ae5aeb6d7c15938Dianne Hackborn /** @hide */ 9329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int PROC_OUT_STRING = 0x1000; 9339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** @hide */ 9349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int PROC_OUT_LONG = 0x2000; 9359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** @hide */ 9369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int PROC_OUT_FLOAT = 0x4000; 9379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** @hide */ 9399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final native boolean readProcFile(String file, int[] format, 9409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String[] outStrings, long[] outLongs, float[] outFloats); 941c64edde69d18498fb2954f71a546357b07ab996aEvan Millar 942c64edde69d18498fb2954f71a546357b07ab996aEvan Millar /** @hide */ 943c64edde69d18498fb2954f71a546357b07ab996aEvan Millar public static final native boolean parseProcLine(byte[] buffer, int startIndex, 944c64edde69d18498fb2954f71a546357b07ab996aEvan Millar int endIndex, int[] format, String[] outStrings, long[] outLongs, float[] outFloats); 9459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 946f72467ad9843bf5d4b75fb308386e77ebb5c3447Dianne Hackborn /** @hide */ 947f72467ad9843bf5d4b75fb308386e77ebb5c3447Dianne Hackborn public static final native int[] getPidsForCommands(String[] cmds); 948f72467ad9843bf5d4b75fb308386e77ebb5c3447Dianne Hackborn 9499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the total Pss value for a given process, in bytes. 9519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pid the process to the Pss for 9539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the total Pss value for the given process in bytes, 9549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * or -1 if the value cannot be determined 9559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 9569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 9579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final native long getPss(int pid); 9583f9dd287b99340efaaa257759e71a8f81b2ed113Jeff Brown 9593f9dd287b99340efaaa257759e71a8f81b2ed113Jeff Brown /** 9603f9dd287b99340efaaa257759e71a8f81b2ed113Jeff Brown * Specifies the outcome of having started a process. 9613f9dd287b99340efaaa257759e71a8f81b2ed113Jeff Brown * @hide 9623f9dd287b99340efaaa257759e71a8f81b2ed113Jeff Brown */ 9633f9dd287b99340efaaa257759e71a8f81b2ed113Jeff Brown public static final class ProcessStartResult { 9643f9dd287b99340efaaa257759e71a8f81b2ed113Jeff Brown /** 9653f9dd287b99340efaaa257759e71a8f81b2ed113Jeff Brown * The PID of the newly started process. 9663f9dd287b99340efaaa257759e71a8f81b2ed113Jeff Brown * Always >= 0. (If the start failed, an exception will have been thrown instead.) 9673f9dd287b99340efaaa257759e71a8f81b2ed113Jeff Brown */ 9683f9dd287b99340efaaa257759e71a8f81b2ed113Jeff Brown public int pid; 9693f9dd287b99340efaaa257759e71a8f81b2ed113Jeff Brown 9703f9dd287b99340efaaa257759e71a8f81b2ed113Jeff Brown /** 9713f9dd287b99340efaaa257759e71a8f81b2ed113Jeff Brown * True if the process was started with a wrapper attached. 9723f9dd287b99340efaaa257759e71a8f81b2ed113Jeff Brown */ 9733f9dd287b99340efaaa257759e71a8f81b2ed113Jeff Brown public boolean usingWrapper; 9743f9dd287b99340efaaa257759e71a8f81b2ed113Jeff Brown } 9750769e550011d8f8a19e333efe1706ef0e6cc6a5fColin Cross 9760769e550011d8f8a19e333efe1706ef0e6cc6a5fColin Cross /** 9770769e550011d8f8a19e333efe1706ef0e6cc6a5fColin Cross * Kill all processes in a process group started for the given 9780769e550011d8f8a19e333efe1706ef0e6cc6a5fColin Cross * pid. 9790769e550011d8f8a19e333efe1706ef0e6cc6a5fColin Cross * @hide 9800769e550011d8f8a19e333efe1706ef0e6cc6a5fColin Cross */ 9810769e550011d8f8a19e333efe1706ef0e6cc6a5fColin Cross public static final native int killProcessGroup(int uid, int pid); 9820769e550011d8f8a19e333efe1706ef0e6cc6a5fColin Cross 9830769e550011d8f8a19e333efe1706ef0e6cc6a5fColin Cross /** 9840769e550011d8f8a19e333efe1706ef0e6cc6a5fColin Cross * Remove all process groups. Expected to be called when ActivityManager 9850769e550011d8f8a19e333efe1706ef0e6cc6a5fColin Cross * is restarted. 9860769e550011d8f8a19e333efe1706ef0e6cc6a5fColin Cross * @hide 9870769e550011d8f8a19e333efe1706ef0e6cc6a5fColin Cross */ 9880769e550011d8f8a19e333efe1706ef0e6cc6a5fColin Cross public static final native void removeAllProcessGroups(); 989b89970e0fb11b71592e10570d387eac3bbb6f6d6Tim Murray 990b89970e0fb11b71592e10570d387eac3bbb6f6d6Tim Murray /** 991b89970e0fb11b71592e10570d387eac3bbb6f6d6Tim Murray * Check to see if a thread belongs to a given process. This may require 992b89970e0fb11b71592e10570d387eac3bbb6f6d6Tim Murray * more permissions than apps generally have. 993b89970e0fb11b71592e10570d387eac3bbb6f6d6Tim Murray * @return true if this thread belongs to a process 994b89970e0fb11b71592e10570d387eac3bbb6f6d6Tim Murray * @hide 995b89970e0fb11b71592e10570d387eac3bbb6f6d6Tim Murray */ 996b89970e0fb11b71592e10570d387eac3bbb6f6d6Tim Murray public static final boolean isThreadInProcess(int tid, int pid) { 9979bc12a83b6768c15807c009441d486f82135d383Tim Murray StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskReads(); 998b89970e0fb11b71592e10570d387eac3bbb6f6d6Tim Murray try { 999b89970e0fb11b71592e10570d387eac3bbb6f6d6Tim Murray if (Os.access("/proc/" + tid + "/task/" + pid, OsConstants.F_OK)) { 1000b89970e0fb11b71592e10570d387eac3bbb6f6d6Tim Murray return true; 1001b89970e0fb11b71592e10570d387eac3bbb6f6d6Tim Murray } else { 1002b89970e0fb11b71592e10570d387eac3bbb6f6d6Tim Murray return false; 1003b89970e0fb11b71592e10570d387eac3bbb6f6d6Tim Murray } 1004b89970e0fb11b71592e10570d387eac3bbb6f6d6Tim Murray } catch (Exception e) { 1005b89970e0fb11b71592e10570d387eac3bbb6f6d6Tim Murray return false; 10069bc12a83b6768c15807c009441d486f82135d383Tim Murray } finally { 10079bc12a83b6768c15807c009441d486f82135d383Tim Murray StrictMode.setThreadPolicy(oldPolicy); 1008b89970e0fb11b71592e10570d387eac3bbb6f6d6Tim Murray } 10099bc12a83b6768c15807c009441d486f82135d383Tim Murray 1010b89970e0fb11b71592e10570d387eac3bbb6f6d6Tim Murray } 10119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1012