我正在构建一个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
启动的进程? 最佳答案
事实证明,随着我逐步实现ppp连接,我不再需要手动终止pppd进程。只需发送一个Terminate-Request即可告知pppd进程可以关闭其连接,此后该进程将关闭。
关于潜在的问题,很好地杀死了一个根进程,我并不是找不到合适的解决方案。最有效的选项似乎仍在运行busybox killall pppd
或通过使用ps
和基本Java字符串操作手动搜索进程。