killByName function
强力清理旧进程
核心逻辑:不管有没有在运行,先尝试杀掉同名进程,释放 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;
}
}