kill-port-process-cli
Advanced tools
Comparing version
68
index.js
#!/usr/bin/env node | ||
const { exec } = require('child_process'); | ||
@@ -21,8 +20,8 @@ | ||
const findPidCommand = port => process.platform === 'win32' | ||
? `netstat -ano | findstr :${port}` | ||
: `lsof -i:${port} -t`; | ||
? `netstat -ano | findstr :${port}` | ||
: `lsof -i:${port} -t`; | ||
const killCommand = pid => process.platform === 'win32' | ||
? `taskkill /PID ${pid} /F` | ||
: `kill -9 ${pid}`; | ||
? `taskkill /PID ${pid} /F` | ||
: `kill -9 ${pid}`; | ||
@@ -33,3 +32,2 @@ const findAndKillProcess = (port) => { | ||
exec(findPidCommand(port), (err, stdout, stderr) => { | ||
// 如果指定的端口没有进程在使用 则输出这个端口未被占用 | ||
if (err || stderr) { | ||
@@ -40,24 +38,31 @@ resolve(`Port ${port} is not in use.`); | ||
const pid = process.platform === 'win32' | ||
? stdout.split('\n').find(line => line.includes('LISTEN'))?.trim().split(/\s+/).pop() | ||
: stdout.split('\n').map(line => line.trim()).filter(line => line).pop(); | ||
const pids = process.platform === 'win32' | ||
? stdout | ||
.split('\n') | ||
.filter(line => line.includes('LISTEN')) | ||
.map(line => line.trim().split(/\s+/)) | ||
: stdout.split('\n').map(line => line.trim()).filter(line => line); | ||
if (pid) { | ||
console.log(`Process on port ${port} has PID: ${pid}`); | ||
// 杀死进程 | ||
exec(killCommand(pid), (killErr, killStdout, killStderr) => { | ||
if (killErr) { | ||
reject(`Error killing process ${pid}: ${killErr}`); | ||
return; | ||
} | ||
if (killStderr) { | ||
reject(`stderr: ${killStderr}`); | ||
return; | ||
} | ||
resolve(`Process ${pid} killed successfully on port ${port}.`); | ||
}); | ||
} else { | ||
if (pids.length === 0) { | ||
resolve(`No process found on port ${port}`); | ||
return; | ||
} | ||
console.log(`Processes on port ${port} have PIDs: ${pids.join(', ')}`); | ||
Promise.all( | ||
pids.map(pid => | ||
new Promise((killResolve, killReject) => { | ||
exec(killCommand(pid), (killErr, killStdout, killStderr) => { | ||
if (killErr || killStderr) { | ||
killReject(`Error killing process ${pid}: ${killErr || killStderr}`); | ||
return; | ||
} | ||
killResolve(`Process ${pid} killed successfully on port ${port}.`); | ||
}); | ||
}) | ||
) | ||
) | ||
.then(killResults => resolve(killResults.join('\n'))) | ||
.catch(killErr => reject(killErr)); | ||
}); | ||
@@ -67,9 +72,10 @@ }); | ||
// 并行处理所有端口 | ||
Promise.all(ports.map(findAndKillProcess)) | ||
.then(results => { | ||
results.forEach(result => console.log(result)); | ||
}) | ||
.catch(err => { | ||
console.error(err); | ||
}); | ||
.then(results => { | ||
results.forEach(result => console.log(result)); | ||
}) | ||
.catch(err => { | ||
console.error(err); | ||
}); |
{ | ||
"name": "kill-port-process-cli", | ||
"version": "1.0.10", | ||
"version": "1.0.11", | ||
"description": "A CLI tool to kill processes by port", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
5697
4.26%64
8.47%