进程 ID 在 运行 进程中更改

Process Id is changed while running the process

我在 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;

现在它会 return 类似 14823 的东西,当我试图杀死它时它已经改变了。

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

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

不,运行 进程的进程 ID 在 运行 时不会改变。

如果没有使用您启动的进程的进程 ID 杀死的进程,则意味着两种情况之一:

  • 在您获取进程列表之前,进程已经退出
  • 进程名称不是“UNIToolAPIServer”。

如果你想终止创建的进程,你应该保留 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();
     }
  }
}