我正在构建一个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
,似乎没有体面的解决方案。
是否有一种相当干净的方法可以杀死在Android上通过su
启动的流程?
答案 0 :(得分:2)
事实证明,随着我实现ppp连接的进展,我不再需要手动终止pppd进程。简单地发送一个Terminate-Request告诉pppd进程它可以关闭它的连接,然后进程关闭。
关于底层问题,很好地杀死了一个根进程,我无法找到一个像样的解决方案。最有效的选项似乎仍在运行busybox killall pppd
或使用ps
和基本的Java字符串操作手动搜索进程。