Уничтожение корневых процессов в 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.

Другие вопросы по тегам