내 애플리케이션에서 logcat에서 추출한 로그 파일을 Android 디바이스에 기록하는 프로세스를 만듭니다. 이렇게하려면 을 사용하여 을 su
권한으로 실행하고 사용자가 로그를 취소 할 수 있도록이 프로세스에 대한 참조를 유지합니다.Android (Jelly Bean)에서 프로세스를 종료하는 방법
이 문제는 내 안드로이드 버전 (4.1)에 내가 this을 확인한 후 process.destroy()
I/System (2948): Failed to destroy process 3134
D/dalvikvm(2221): GC_CONCURRENT freed 499K, 12% free 6962K/7879K, paused 12ms+10ms, total 84ms
I/System (2948): libcore.io.ErrnoException: kill failed: EPERM (Operation not permitted)
I/System (2948): at libcore.io.Posix.kill(Native Method)
I/System (2948): at libcore.io.ForwardingOs.kill(ForwardingOs.java:77)
I/System (2948): at java.lang.ProcessManager$ProcessImpl.destroy(ProcessManager.java:260)
I/System (2948): at com.blablabla.android.core.device.debug.DebugDevice.destroyProcess(DebugDevice.java:127)
I/System (2948): at com.blablabla.android.core.device.debug.DebugDevice.cancelLogcatToFile(DebugDevice.java:98)
를 호출 할 때 나는이 예외를 얻을, 그래서 내 코드, 제안 된 솔루션을 내 cancelLogcatToFile을 수정 한
private void exportLogcatToFile(String fileName) {
String command = new StringBuffer("logcat -f ").append(fileName)
.append("\n").toString();
try {
logcatToFileProcess = Runtime.getRuntime().exec("su");
final DataOutputStream os = new DataOutputStream(
logcatToFileProcess.getOutputStream());
os.writeBytes(command);
} catch (IOException e) {
Log.e(TAG, Log.getStackTraceString(e));
}
}
그리고 그 과정을 죽일 :
private void cancelLogcatToFile() {
if (logcatToFileProcess != null) {
// logcatToFileProcess.destroy();
destroyProcess(logcatToFileProcess);
logcatToFileProcess = null;
}
}
private static void destroyProcess(Process process) {
try {
if (process != null) {
// use exitValue() to determine if process is still running.
process.exitValue();
}
} catch (IllegalThreadStateException e) {
// process is still running, kill it.
process.destroy();
}
}
,369을 같이하다
고마워요!
편집 :이 코드는 루팅 된 장치에서 실행될 예정이므로 su
은 문제가되지 않습니다.
또한, 나는 내가 killall logcat
처럼 뭔가를 할 수 알고 있지만 나는 살아
'su'는 대부분의 Android 기기에서 사용할 수 없습니다. 이것은 루팅 된 장치에만 해당되는 것입니까? – Karakuri
기본적으로 루트가있는 특정 안드로이드 장치를위한 것입니다 –
프로세스 PID를 가져 와서'kill '명령을 보내려고 했습니까? – m0skit0