2014-03-07 71 views
1

我的android應用程序使用Runtime.exec()啓動腳本。該腳本依次運行啓動進程的命令。我想捕獲該進程的pid,所以我可以跟蹤它的狀態並在以後殺死它。Android shell腳本無法在後臺運行命令

下面是我的腳本摘錄:

$exec $options & 
echo pid:$!: 

我希望PID要馬上附和,但事實並非如此。該命令按預期執行,但在我手動終止該命令啓動的進程之前,pid不會被回顯。所以它似乎不尊重在後臺運行該命令的請求。我做錯了,還是Android不支持?

萬一它很重要,我運行的命令($ exec)是對二進制可執行文件的調用,並且$ options擴展爲該可執行文件的參數。

回答

0

我做錯了。我有

Runtime.getRuntime().exec(new String[]{"/path/to/script"}, env); 

這對啓動shell腳本本身很好,因爲它不是shell命令。但爲了解釋shell腳本中的&,它必須在shell中運行...以及...。

所以我需要像調用shell命令一樣直接調用shell腳本。像這樣:

Runtime.getRuntime().exec(new String[]{"/system/bin/sh", "/path/to/script", scriptArgs...}, env); 

通過以下代碼和腳本,二進制文件在後臺運行,並且pid被回顯到指定爲腳本arg的文件。

$exec $options & 
echo $! > "$1"