2017-01-25 23 views
1

私は衛星モデム経由で通信を行うアンドロイドプロジェクトに参加しています。Android - ppid = 1でプロセスを殺す方法

アンドロイド経由で接続するには、モデムのpppdコマンドを実行する必要があります。

このコマンドはbashで実行しました。 Androidはこのプロセスを作成するいくつかの瞬間で

process = Runtime.getRuntime().exec(new String[]{"su", "root", "-c", "/data/local/android_connect.sh", "&> /mnt/sdcard/Download/log.txt"}); 

PPID = 1

これは、私は、次のコマンド

android.os.Process.killProcess(pidProcess); 
     if (process != null) 
      process.destroy(); 

を実行することにより、プロセスを強制終了することはできませんが起こることが死滅させることが可能ですPPID = 1〜アンドロイドで処理しますか?

+0

あなたはPIDで殺すのはなぜですか? – heemayl

答えて

3

これは良い考えではありませんが、 Runtime.getRuntime().exec("kill -9 " + PID);に電話してみてください。 killProcessの代わりにkillBackgroundProcessesに電話してみてください。 killProcessは、あなたのアプリケーションのUIDと異なるUIDを持つプロセスを殺すことを許可しません。killBackgroundProcessesはあなたのためにそれを行うことができます。

あなたのアプリがandroid.permission.ACCESS_SUPERUSER,android.permission.KILL_BACKGROUND_PROCESSESandroid.permission.GET_TASKSのような権限を持っていることを確認してください。

+1

おそらく '-9'は必要ないでしょう。親プロセスが 'init'であるという事実は、何の違いもないはずですか? – slezica

+1

はい、私はそれが本当に違いはないと思います。しかし、著者がprocを終了することに問題があるなら、SIGKILLが役立つかもしれません。 –

+0

** killBackgroundProcess **の違いは何ですか? –

1

PID=1がプロセスマネージャです。これはカーネルの直後に実行され、それを終了するとすべてのプロセスが終了します。そうすることはお勧めしませんが、もしあなたがこれを試してみることができます:

Runtime.getRuntime().exec("kill -9 " + PID); 
+0

この呼び出しの後でもガベージコレクションが行われますか? –