0

バックグラウンドで実行され、 straceコマンドを使用して現在実行中のアプリケーションによって実行されたシステム コールをログに記録する監視アプリを構築しています。

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

ここで、 processIDは、実装されている他のメソッドから取得される、現在実行中のプロセスの PID です。実行されたすべてのシステム コール情報を使用して、適切に監視する最初のアプリのシステム コールをログに記録します。しかし、新しいアプリが開始されると (2 つ目以降)、プロセス IDは正しく更新されますが、ファイルtraceFile_processIDは空のファイルとして書き込まれます。なぜそれが起こっているのか理解できません。監視されている最初のアプリのstrace実行がまだそこにあるからですか?? もしそうなら、^Cを実行してそのセッションを終了し、adbシェルコマンドプロンプトのように新しいセッションを開始するにはどうすればよいですか?? 助けてください.....

4

1 に答える 1

1

あなたが言うように「^C」したい場合、あなたが本当に求めているのは、与えられたプロセスIDにSIGINTと呼ばれるシグナルを上げる方法です。これはkill(processID, SIGINT);、ターゲット プロセスに対してキーボードで Ctrl-C を押すのと同じです。

于 2013-02-10T12:30:46.407 に答える