在Android中杀死根进程

时间:2011-06-29 20:12:30

标签: android service process su pppd

我正在构建一个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 pppdsu,就像初次调用pppd一样。即使我在第一次调用中使用su.destroy(),也只是调用pppd /dev/pts/0 nodetach失败,这会阻止pppd分叉并创建后台进程。 killall有效,但它可能会破坏依赖pppd的其他应用程序。

我更喜欢使用直接消除pppd进程的手术刀,但是没有运行ps,搜索PID并调用kill,似乎没有体面的解决方案。

是否有一种相当干净的方法可以杀死在Android上通过su启动的流程?

1 个答案:

答案 0 :(得分:2)

事实证明,随着我实现ppp连接的进展,我不再需要手动终止pppd进程。简单地发送一个Terminate-Request告诉pppd进程它可以关闭它的连接,然后进程关闭。

关于底层问题,很好地杀死了一个根进程,我无法找到一个像样的解决方案。最有效的选项似乎仍在运行busybox killall pppd或使用ps和基本的Java字符串操作手动搜索进程。