Уничтожение корневых процессов в Android - PullRequest
2 голосов
/ 30 июня 2011

Я создаю приложение для Android, которое запускает процесс, вызывая su и отправляя ему команду, следующим образом:

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

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

Когда я хочу остановить службу и завершить процесс pppd, я в настоящее время запускаю busybox killall pppd - su, как при первоначальном вызове pppd. Простой вызов su.destroy() не выполняется, даже если я использую pppd /dev/pts/0 nodetach в первом вызове, что не позволяет pppd разветвляться и создавать фоновый процесс. killall работает, но может сломать другие приложения, использующие pppd.

Я бы очень предпочел скальпель, который позволял бы мне напрямую исключить процесс pppd, но, кроме запуска ps, поиска по PID и вызова kill, похоже, не найдется достойного решения.

Есть ли достаточно чистый способ убить процесс, который был запущен через su на Android?

1 Ответ

2 голосов
/ 05 июля 2011

Оказывается, что по мере реализации соединения ppp мне больше не нужно было вручную убивать процесс pppd.Простая отправка запроса Terminate-Request сообщает процессу pppd о том, что он может закрыть свое соединение, и после этого процесс завершает свою работу.

Что касается основной проблемы, аккуратно убивая корневой процесс, я не смог найтидостойное решение.Наиболее эффективным вариантом по-прежнему остается запуск busybox killall pppd или ручной поиск процесса с использованием ps и базовых манипуляций со строками Java.

...