在正常的进程工作中可能遇到某些某些资源被占用的情况,需要关闭这些占用资源的进程,然后方便自己继续进行工作,以adb.exe进程被占用为例:
设置默认adb端口位5037,如果不是该端口可以在函数的参数列表中增加一个变量来替代。
private void button1_Click(object sender, EventArgs e)
{
try
{
//创建一个进程
Process p = new Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.UseShellExecute = false;//是否使用操作系统shell启动
p.StartInfo.RedirectStandardInput = true;//接受来自调用程序的输入信息
p.StartInfo.RedirectStandardOutput = true;//由调用程序获取输出信息
p.StartInfo.RedirectStandardError = true;//重定向标准错误输出
p.StartInfo.CreateNoWindow = true;//不显示程序窗口
p.Start();//启动程序
string strCMD = "netstat -aon|findstr \"5037\"";
//向cmd窗口发送输入信息
p.StandardInput.WriteLine(strCMD + "&exit");
p.StandardInput.AutoFlush = true;
//获取cmd窗口的输出信息
string output = p.StandardOutput.ReadToEnd();
char[] szChar = new char[] { '\r', '\n' };
string[] strArr = output.Split(szChar, StringSplitOptions.RemoveEmptyEntries);
List<int> listInt = new List<int>();
foreach (string strItem in strArr)
{
if (strItem.Contains("ESTABLISHED"))
{
string strPid = strItem.Substring(strItem.IndexOf("ESTABLISHED") + 11);
listInt.Add(Int32.Parse(strPid.Trim()));
}
}
strCMD = "taskkill /f ";
foreach (int nItem in listInt)
{
strCMD += $" /pid {nItem}"; // 一次性杀死多个进程
}
//向cmd窗口发送输入信息
p.Start();//启动程序
p.StandardInput.WriteLine(strCMD + " &exit");
p.StandardInput.AutoFlush = true;
richTextBox1.Text = output;
//等待程序执行完退出进程
p.WaitForExit();
p.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message + "\r\n跟踪;" + ex.StackTrace);
}
}