0

我正在构建一个监视器应用程序,它在后台运行并使用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 命令提示符中那样启动一个新会话?请帮助我......

4

1 回答 1

1

如果您想像您所说的那样“^C”,那么您真正要求的是如何将名为 SIGINT 的信号提升到给定的 processID。您可以通过简单地做到这一点kill(processID, SIGINT);- 这相当于在目标进程的键盘上按 Ctrl-C。

于 2013-02-10T12:30:46.407 回答