using System;
using System.Diagnostics;
using System.Linq;
namespace ToolLibrary
{
public static class PortProcessManager
{
///
/// 获取指定端口占用的进程 PID
///
/// 指定的端口号
/// 占用端口的进程 PID,失败时返回 -1
public static int GetProcessIdByPort(int port)
{
try
{
// 使用 netstat 命令获取端口信息
var startInfo = new ProcessStartInfo
{
FileName = "netstat",
Arguments = $"-ano | findstr :{port}", // 查找指定端口的占用情况
RedirectStandardOutput = true,
UseShellExecute = false,
CreateNoWindow = true
};
using (var process = Process.Start(startInfo))
using (var reader = process.StandardOutput)
{
string output = reader.ReadToEnd();
if (!string.IsNullOrEmpty(output))
{
// 输出格式: TCP 0.0.0.0:2403 0.0.0.0:0 LISTENING 1234
var columns = output.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
if (columns.Length > 4)
{
int pid = int.Parse(columns[columns.Length - 1]); // 获取 PID
return pid;
}
}
}
}
catch (Exception ex)
{
Console.WriteLine("查询端口进程失败: " + ex.Message);
}
return -1; // 返回无效的 PID
}
///
/// 根据 PID 杀死指定的进程
///
/// 进程 ID
/// 是否成功杀死进程
public static bool KillProcessById(int pid)
{
try
{
var process = Process.GetProcessById(pid);
process.Kill();
Console.WriteLine($"进程 PID {pid} 已成功结束。");
return true;
}
catch (Exception ex)
{
Console.WriteLine("结束进程失败: " + ex.Message);
return false;
}
}
///
/// 查询端口占用的进程并杀死该进程
///
/// 指定的端口号
/// 是否成功杀死进程
public static bool KillProcessByPort(int port)
{
int pid = GetProcessIdByPort(port);
if (pid > 0)
{
return KillProcessById(pid);
}
else
{
Console.WriteLine($"端口 {port} 没有被占用或未找到相关进程。");
return false;
}
}
}
}