2

次の行に沿って、suを呼び出してコマンドを送信することでプロセスを開始するAndroidアプリケーションを構築しています。

Process su = Runtime.getRuntime().exec( "su" );
DataOutputStream out = new DataOutputStream( su.getOutputStream() );

out.writeChars( "pppd /dev/pts/0" );
out.flush();

サービスを停止してpppdプロセスを強制終了したい場合、現在、pppdへの最初の呼び出しのように実行busybox killall pppdしています。最初の呼び出しで使用したとしても、su単に呼び出しが失敗するため、pppdがフォークしてバックグラウンドプロセスを作成できなくなります。 動作しますが、pppdに依存する他のアプリケーションを壊す可能性があります。 su.destroy()pppd /dev/pts/0 nodetachkillall

pppdプロセスを直接排除できるメスが大いに好きですが、実行ps、PIDの検索、呼び出しkillがなければ、適切な解決策はないようです。

suAndroidで開始されたプロセスを強制終了するための合理的にクリーンな方法はありますか?

4

1 に答える 1

2

ppp 接続の実装を進めていくと、pppd プロセスを手動で強制終了する必要がなくなったことがわかりました。Terminate-Request を送信するだけで、pppd プロセスに接続を閉じることができることを伝え、その後プロセスをシャットダウンします。

根底にある問題、つまりルート プロセスを適切に強制終了することに関しては、まともな解決策を見つけることができませんでした。最も効果的なオプションは、基本的な Java 文字列操作busybox killall pppdを使用してプロセスを実行するか、手動で検索することです。ps

于 2011-07-05T19:06:25.860 に答える