diff --git a/src/main/scala/com/github/shadowsocks/ShadowVpnService.scala b/src/main/scala/com/github/shadowsocks/ShadowVpnService.scala index 2dc8214f..c1b2e44f 100644 --- a/src/main/scala/com/github/shadowsocks/ShadowVpnService.scala +++ b/src/main/scala/com/github/shadowsocks/ShadowVpnService.scala @@ -373,14 +373,13 @@ class ShadowVpnService extends VpnService { def onDisconnect() { val sb = new StringBuilder - if (!waitForProcess("redsocks")) { - sb.append("kill -9 `cat /data/data/com.github.shadowsocks/redsocks.pid`").append("\n") - } if (!waitForProcess("shadowsocks")) { - sb.append("kill -9 `cat /data/data/com.github.shadowsocks/shadowsocks.pid`").append("\n") + sb ++= "kill -9 `cat /data/data/com.github.shadowsocks/shadowsocks.pid`" ++= "\n" + sb ++= "killall -9 shadowsocks" ++= "\n" } if (!waitForProcess("tun2socks")) { - sb.append("kill -9 `cat /data/data/com.github.shadowsocks/tun2socks.pid`").append("\n") + sb ++= "kill -9 `cat /data/data/com.github.shadowsocks/tun2socks.pid`" ++= "\n" + sb ++= "killall -9 tun2socks" ++= "\n" } Utils.runCommand(sb.toString()) } diff --git a/src/main/scala/com/github/shadowsocks/Shadowsocks.scala b/src/main/scala/com/github/shadowsocks/Shadowsocks.scala index 68935d97..c3cdc825 100644 --- a/src/main/scala/com/github/shadowsocks/Shadowsocks.scala +++ b/src/main/scala/com/github/shadowsocks/Shadowsocks.scala @@ -233,17 +233,21 @@ class Shadowsocks extends UnifiedSherlockPreferenceActivity with CompoundButton. private def crash_recovery() { val sb = new StringBuilder + sb.append(Utils.getIptables).append(" -t nat -F OUTPUT").append("\n") sb.append("kill -9 `cat /data/data/com.github.shadowsocks/pdnsd.pid`").append("\n") - sb.append("kill -9 `cat /data/data/com.github.shadowsocks/redsocks.pid`").append("\n") sb.append("kill -9 `cat /data/data/com.github.shadowsocks/shadowsocks.pid`").append("\n") sb.append("kill -9 `cat /data/data/com.github.shadowsocks/polipo.pid`").append("\n") sb.append("kill -9 `cat /data/data/com.github.shadowsocks/tun2socks.pid`").append("\n") sb.append("killall -9 pdnsd").append("\n") - sb.append("killall -9 redsocks").append("\n") sb.append("killall -9 shadowsocks").append("\n") sb.append("killall -9 polipo").append("\n") sb.append("killall -9 tun2socks").append("\n") + Utils.runCommand(sb.toString()) + + sb.clear() + sb.append("kill -9 `cat /data/data/com.github.shadowsocks/redsocks.pid`").append("\n") + sb.append("killall -9 redsocks").append("\n") Utils.runRootCommand(sb.toString()) } diff --git a/src/main/scala/com/github/shadowsocks/ShadowsocksService.scala b/src/main/scala/com/github/shadowsocks/ShadowsocksService.scala index 51154c53..4055485b 100644 --- a/src/main/scala/com/github/shadowsocks/ShadowsocksService.scala +++ b/src/main/scala/com/github/shadowsocks/ShadowsocksService.scala @@ -368,20 +368,28 @@ class ShadowsocksService extends Service { def onDisconnect() { Utils.runRootCommand(Utils.getIptables + " -t nat -F OUTPUT") + val sb = new StringBuilder - sb.append("kill -9 `cat /data/data/com.github.shadowsocks/redsocks.pid`").append("\n") + sb ++= "kill -9 `cat /data/data/com.github.shadowsocks/redsocks.pid`" ++= "\n" + sb ++= "killall -9 redsocks" ++= "\n" + Utils.runRootCommand(sb.toString()) + + sb.clear() if (!waitForProcess("pdnsd")) { - sb.append("kill -9 `cat /data/data/com.github.shadowsocks/pdnsd.pid`").append("\n") + sb ++= "kill -9 `cat /data/data/com.github.shadowsocks/pdnsd.pid`" ++= "\n" + sb ++= "killall -9 pdnsd" ++= "\n" } if (!waitForProcess("shadowsocks")) { - sb.append("kill -9 `cat /data/data/com.github.shadowsocks/shadowsocks.pid`").append("\n") + sb ++= "kill -9 `cat /data/data/com.github.shadowsocks/shadowsocks.pid`" ++= "\n" + sb ++= "killall -9 shadowsocks" ++= "\n" } if (isHTTPProxy) { if (!waitForProcess("polipo")) { - sb.append("kill -9 `cat /data/data/com.github.shadowsocks/polipo.pid`").append("\n") + sb ++= "kill -9 `cat /data/data/com.github.shadowsocks/polipo.pid`" ++= "\n" + sb ++= "killall -9 polipo" ++= "\n" } } - Utils.runRootCommand(sb.toString()) + Utils.runCommand(sb.toString()) } override def onStart(intent: Intent, startId: Int) {