2

我正在构建一个 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,似乎没有一个像样的解决方案。

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

4

1 回答 1

2

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

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

于 2011-07-05T19:06:25.860 回答