owenclave / app/src/main/java/io/nekohasekai/sagernet/bg/Executable.kt

github - dev - back to tree - upstream
/****************************************************************************** * * * Copyright (C) 2021 by nekohasekai * * Copyright (C) 2021 by Max Lv * * Copyright (C) 2021 by Mygod Studio * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * * * ******************************************************************************/ package io.nekohasekai.sagernet.bg import android.system.ErrnoException import android.system.Os import android.system.OsConstants import io.nekohasekai.sagernet.ktx.Logs import java.io.File import java.io.IOException import androidx.core.text.isDigitsOnly object Executable { private val EXECUTABLES = setOf( "libnaive.so", "libshadowquic.so", "libolcrtc.so", ) fun killAll() { for (process in File("/proc").listFiles { _, name -> name.isDigitsOnly() } ?: return) { val exe = File(try { File(process, "cmdline").inputStream().bufferedReader().use { it.readText() } } catch (_: IOException) { continue }.split(Character.MIN_VALUE, limit = 2).first()) if (EXECUTABLES.contains(exe.name)) try { Os.kill(process.name.toInt(), OsConstants.SIGKILL) Logs.w("SIGKILL ${exe.nameWithoutExtension} (${process.name}) succeed") } catch (e: ErrnoException) { if (e.errno != OsConstants.ESRCH) { Logs.w("SIGKILL ${exe.absolutePath} (${process.name}) failed") Logs.w(e) } } } } }