通過 nodejs 子進(jìn)程方式獲取 被占用端口的 pid 和應(yīng)用名稱,同時區(qū)分環(huán)境 windows 和 mac
提供給用戶,pId 和 pName 讓用戶自己決定是 kill 進(jìn)程 還是 提示使用者什么應(yīng)用占用了端口
const { execSync } = window.require('child_process');
const os = window.require('os');
const platform = os.platform();
const GetProcessInfo = (port) =>
new Promise((resolve, reject) => {
if (platform === 'win32') {
const order = `netstat -aon | findstr ${port}`;
try {
const stdout = execSync(order);
const portInfo = stdout.toString().trim().split(/\s+/);
const pId = portInfo[portInfo.length - 1];
const processStdout = execSync(`tasklist | findstr ${pId}`);
const [pName] = processStdout.toString().trim().split(/\s+/);
resolve({
pId,
pName,
});
} catch (error) {
reject(error);
}
} else {
const order = `lsof -i :${port}`;
try {
const stdout = execSync(order);
const [pName, pId] = stdout
.toString()
.trim()
.split(/\n/)[1]
.split(/\s+/);
resolve({
pId,
pName,
});
} catch (error) {
reject(error);
}
}
});
module.exports = GetProcessInfo;