Уничтожение корневых процессов в Android
Я создаю приложение для 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
на андроид?
1 ответ
Оказывается, что по мере реализации соединения ppp мне больше не нужно было вручную убивать процесс pppd. Простая отправка запроса Terminate-Request сообщает процессу pppd, что он может закрыть свое соединение, и после этого процесс завершает работу.
Что касается лежащей в основе проблемы, красиво убивающей корневой процесс, я не смог найти достойного решения. Наиболее эффективный вариант все еще кажется запущенным busybox killall pppd
или вручную искать процесс с помощью ps
и основные манипуляции со строками Java.