进程 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();
}
}
}
我在 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();
}
}
}