1

私の Android アプリは、Runtime.exec() を使用してスクリプトを起動します。スクリプトは、プロセスを開始するコマンドを実行します。そのプロセスの pid を取得したいので、そのステータスを追跡して後で強制終了できます。

これが私のスクリプトからの抜粋です:

$exec  $options &
echo pid:$!:

pid がすぐにエコーされることを期待していますが、そうではありません。コマンドは期待どおりに実行されますが、コマンドによって開始されたプロセスを手動で強制終了するまで、pid はエコーされません。そのため、コマンドをバックグラウンドで実行する要求を尊重していないようです。私はそれを間違っていますか、それとも Android はこれをサポートしていませんか?

重要な場合、私が実行しているコマンド ($exec) はバイナリ実行可能ファイルへの呼び出しであり、$options はその実行可能ファイルの引数に展開されます。

4

1 に答える 1

0

私はそれを間違っていました。私が持っていた

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

これはシェル コマンドではないため、シェル スクリプト自体の起動には問題ありません。しかし&、シェル スクリプト内の が解釈されるためには、それを実行する必要があります...まあ...シェル内で。

そのため、シェル コマンドを直接呼び出すのと同じ方法でシェル スクリプトを呼び出す必要がありました。このような:

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

このコードと以下のスクリプトを使用すると、バイナリ ファイルがバックグラウンドで実行され、スクリプト引数として指定されたファイルに pid がエコーされます。

$exec $options &
echo $! > "$1"
于 2014-03-19T02:25:53.763 に答える