如何使用Runtime.exec重定向dmesg的数据?

时间:2011-11-11 11:10:32

标签: java android kernel logging

问题1: 我想使用我的应用程序将内核日志重定向到其他文件。 如何正确执行?代码如下所示:

Runtime.getRuntime().exec("dmesg > /data/kernel_log.txt"); 

问题2: 我想使用我的应用程序清除内核日志。如何更正以下代码;

Runtime.getRuntime().exec("dmesg -c"); 

注1: 我的目标是从START到LATEST获取内核的所有日志(dmesg)。 由于dmesg具有缓冲区大小限制,我不想重建内核 只是为了调整缓冲区的大小。

注2:这与此非常相关; android : how to run a shell command from within code

注意3:目前我正在使用具有ENG模式构建的设备,这意味着这是根本的,我是否正确?

Logcat错误消息:

11-11 20:18:47.910: E/DmesgGetterService(2885): java.io.IOException: Error running exec(). Command: [dmesg > /data/kernel_log.txt] Working Directory: null Environment: null
...
11-11 20:19:07.920: E/DmesgGetterService(2885): Caused by: java.io.IOException: No such file or directory
...

1 个答案:

答案 0 :(得分:0)

我能够以不同的方法获取dmesg日志。使用AlarmManager在指定的时间间隔内运行服务我从内核中获取日志,然后找到我从上一次运行中复制的最后一行,然后附加新日志。那就是它!