我正在构建一个监控应用程序,该应用程序在后台运行,并使用 strace 命令记录当前正在运行的应用程序执行的系统调用。
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 :(得分:1)
如果你想要“^ C”,你真正要求的是如何将名为SIGINT的信号提升到给定的processID。您可以通过kill(processID, SIGINT);
完成此操作 - 这相当于在键盘上按Ctrl-C进行目标进程。