2013-02-10 49 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鍵盤目標進程上。