[英]Running ps shell command on Android programmatically
我正在嘗試在Android應用上執行ps命令,如下所示:
try {
Process process = Runtime.getRuntime().exec("ps");
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
int read;
char[] buffer = new char[4096];
StringBuffer output = new StringBuffer();
while ((read = reader.read(buffer)) > 0) {
output.append(buffer, 0, read);
}
reader.close();
// Waits for the command to finish.
process.waitFor();
Log.d(TAG, output.toString());
} catch (IOException e) {
} catch (InterruptedException e) {
}
我正在帶有棒棒糖的三星Galaxy S6上進行測試。 它可以運行,但是我所看到的只是root擁有的進程。
在配備棉花糖的Nexus 5上,我看不到根擁有的進程,但看到了許多其他進程。 它仍然不是完整列表。
Android中是否有某種保護措施可以阻止我在某些設備/ OS版本中查看完整的進程列表?
是的,有多種機制。 在Linux上, ps
通過/proc
文件系統工作。 到目前為止,Nougat是最嚴格的,使用platform / system / core.git#c39ba5a :您根本看不到任何/proc/PID
屬於其他用戶。
在/ proc上啟用hidepid = 2
將以下安裝選項添加到/ proc文件系統:
hidepid=2,gid=3009
除非您在組3009(又名AID_READPROC)中,否則此更改將阻止/ proc訪問。
/proc
訪問也受到platform / system / sepolicy.git中各種規則的限制,其中一些規則適用於早期版本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.