2013-02-10 67 views
0

我建立一个监控应用程序,它在后台运行,并记录由目前使用strace的命令运行的应用程序执行的系统调用。strace的shell命令问题的Android

String cmd="strace -p "+processID+" -o /mnt/sdcard/traceFile_"+processID+".txt"; 
Runtime.getRuntime().exec(cmd); 

这里的ProcessID是当前运行的进程的PID是从实现一些其它方法得到。它使用所有已执行的系统调用信息将其监控的第一个应用程序的系统调用记录正确。但是,当一个新的应用程序开始(第二个起),该的ProcessID正确更新,但该文件traceFile_processID被写成一个空文件。 我无法弄清楚为什么会发生。是否因为第一个应用程序的strace执行还在那里?如果是这样,我可以执行一个^ C来终止该会话并启动一个新的,如在adb shell命令提示符中那样? PLZ帮我.....

+0

如果你想通过调用[destroy()方法(http://docs.oracle.com/javase/1.4.2/docs/api/java/lang杀strace的过程中,你应该能够做到这一点/Process.html#destroy())方法在'exec()'返回的'Process'上。 – Michael 2013-02-10 12:31:12

+0

感谢回答Michael..I尝试这样way..but没有工作..过程亲=调用Runtime.getRuntime()EXEC(CMD)。 pro.destroy();这是你的意图吗? – srooth 2013-02-10 13:31:34

回答

1

如果你想“^ C”照你这么说,你实际上要求的是如何提高叫SIGINT给定的ProcessID信号。你可以做到这一点只需kill(processID, SIGINT); - 这相当于按Ctrl-C键盘目标进程上。