进程Id在运行过程中更改



我在c#中使用System.Diagnostics。我的问题是我正在使用代码来启动和杀死c#中的进程,它工作得很好。但我的问题是,我的进程id在运行过程中发生了变化。这可能吗?如果是,那么我如何获得我想要杀死的实际进程id。我不能通过名称来执行,因为我有多个实例同时在不同的端口上运行,我只想在启动端口上杀死单个实例。

我的代码是:
Process p2 = new Process();
ProcessStartInfo processStartInfo2 =
new ProcessStartInfo(
unitoolLauncherExePath,
"options --port " + port);
p2.StartInfo = processStartInfo2;
p2.Start();
System.Threading.Thread.Sleep(1000);
int processId = p2.Id;

现在它将返回类似于14823的东西,当我试图杀死它时,它已经改变了。

Process[] _proceses = null;
_proceses = Process.GetProcessesByName("UNIToolAPIServer");
foreach (Process proces in _proceses)
{
if (proces.Id == processId)
{                    
proces.Kill();                        
}

}

但是这里没有杀死任何进程,因为没有获取具有上述id的进程。

不允许,运行中的进程id在运行过程中不会改变。

如果没有使用已启动进程的进程id来终止进程,则表示以下两种情况之一:

  • 获取进程列表前,进程已经退出。
  • 进程名不是unitoolapisserver"

如果您想要终止已创建的进程,您应该保留process-object并在其上调用kill方法。不需要遍历系统中的所有进程来查找已启动的进程。例如:

public class MyProcess{
private Process myProcess;
...
public void Start(){
myProcess = new Process();
var processStartInfo2 = new ProcessStartInfo(
unitoolLauncherExePath,
"options --port " + port);
myProcess.StartInfo = processStartInfo2;
myProcess.Start();
}
public void Kill(){
if(myProcess != null && !myProcess.HasExited){
myProcess.Kill();
}
}
}

最新更新