3

rootユーザーとしてコマンドを実行する必要があるアプリを開発しているので、次を使用します。

process = Runtime.getRuntime().exec("su");

次に、次のコマンドでプロセスを起動します。

os = new DataOutputStream(process.getOutputStream());

os.writeBytes("tcpdump\n");

プロセスを終了する必要がある場合、プロセスがos.writeBytes("exit\n");機能せずprocess.waitFor();、ブロックされ、プロセスが終了しません。Control-Cをプロセスに送信して停止する必要がありますが、どうすればよいかわかりません。

ありがとう。

4

3 に答える 3

1

APIのどこかにkill()メソッドがあるかどうかを調べ、そのメソッドを使用してSIGINTシグナルをターゲットプロセスに送信します。

于 2011-02-22T14:14:45.080 に答える
1

Chainfire は、彼のgithubで、 root としてコマンドを実行するために使用できるクラスのサンプル実装を提供しています。Shellクラスは を使用してすべてのタスクを処理するThreadsため、コマンドが返されなくてもコマンドがブロックされないことを確認できます。

コードスニペット:

if(Shell.SU.available()){
   Shell.SU.run("commandAsRoot"); //Command executed as root
else{
   System.out.println("su not found");

または、バイナリが利用可能であることが確実suな場合は、コマンド (コメント行) を実行して、チェックをスキップすることができます。

出典:ハウツー SU

于 2013-01-20T21:14:48.807 に答える