killByName function

Future<bool> killByName(
  1. String targetName
)

强力清理旧进程

核心逻辑:不管有没有在运行,先尝试杀掉同名进程,释放 Tun 网卡句柄

Implementation

Future<bool> killByName(String targetName) async {
  try {
    // /F = 强制终止 /T = 终止由它启动的子进程 /IM = 映像名称(Image Name)加载到内存中运行的可执行文件(.exe)被称为“映像”(Image)
    final res = await Process.run(
      Platform.isWindows ? 'taskkill' : 'pkill',
      Platform.isWindows ? ['/F', '/T', '/IM', targetName] : ['-9', '-f', targetName],
    );
    // exitCode 为 0 代表命令执行成功(确实杀掉了进程)
    if (res.exitCode == 0) {
      devlog('[killByName] 🧹 找到 $targetName 并清理完成 ${res.stdout}');
      return true;
    }
    // 否则视为没找到 (Windows通常128, Linux通常1)
    devlog('[killByName] 🧹 没找到 $targetName ,跳过');
    return false;
  } catch (e) {
    // 仅在系统缺少 taskkill/pkill 命令本身时触发
    devlog('[killByName] 🧹 $targetName 命令执行异常: $e');
    return false;
  }
}