import { exec as execCallback } from 'child_process'; import { promisify } from 'util'; const exec = promisify(execCallback); const port = 3000; // 可修改为需要监听的端口 const getCommand = (port) => { return process.platform === 'win32' ? `netstat -ano | findstr ${port}` : `lsof -i :${port}`; }; const getKillCommand = (pid) => { return process.platform === 'win32' ? `taskkill /f /pid ${pid}` : `kill -9 ${pid}`; }; const killPort = async (port) => { try { const cmd = getCommand(port); const { stdout } = await exec(cmd); if (!stdout.trim()) { console.log(`端口 ${port} 未被占用`); return; } const lines = stdout.trim().split('\n'); const killPromises = lines.map(async (line) => { const parts = line.trim().split(/\s+/); const pid = process.platform === 'win32' ? parts[4] : parts[1]; if (pid && !isNaN(pid)) { try { const killCmd = getKillCommand(pid); await exec(killCmd); console.log(`成功终止占用端口 ${port} 的进程: ${pid}`); } catch (killErr) { console.error(`终止进程 ${pid} 失败:`, killErr); } } }); await Promise.all(killPromises); } catch (err) { console.error('执行命令时出错:', err); } }; // 执行函数 killPort(port);