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