【问题标题】:How can i get a pid of a process generated by cmd line?如何获取由 cmd 行生成的进程的 pid?
【发布时间】:2014-04-24 12:39:11
【问题描述】:

我想知道如何获取由cmd指令启动的进程的pid。

这是一个例子

string instruction = "mpiexec FDTD.exe";

System.Diagnostics.ProcessStartInfo proInfo = new System.Diagnostics.ProcessStartInfo();
System.Diagnostics.Process pro = new System.Diagnostics.Process();

proInfo.FileName = @"cmd";
proInfo.CreateNoWindow = true; 
proInfo.UseShellExecute = false;

proInfo.RedirectStandardOutput = true;
proInfo.RedirectStandardInput = true;
proInfo.RedirectStandardError = true;

pro.StartInfo = proInfo;

richTextBox1.AppendText("FDTD Simulation Starts\n");
pro.Start();

pro.StandardInput.Write(temp + Environment.NewLine);
pro.StandardInput.Write(instruction + Environment.NewLine);
pro.StandardInput.Close();

根据上面的代码,我使用 cmd 行启动了 FDTD.exe。 但是,我找不到获取 FDTD.exe 的 pid 的方法。

有人可以帮帮我吗?

提前谢谢。

【问题讨论】:

  • 出于好奇,你为什么要启动 cmd.exe 来启动 FDTD.exe?为什么不直接启动 FDTD?

标签: c# cmd pid


【解决方案1】:

您可以使用Process.GetProcessesByName 和Process.Id 属性来获取PID。如果只运行一个 FDTD.exe,这很简单:

int pid = Process.GetProcessesByName("FTDT").Single().Id;

如果有多个,您将需要一些方法来选择最好的一个。我不知道确定的方法,但您的方案可能会通过找到在正确时间启动的进程来工作(Duration() 获取TimeSpan 的绝对值):

DateTime targetTime = DateTime.Now;

pro.StandardInput.Write(temp + Environment.NewLine);
pro.StandardInput.Write(instruction + Environment.NewLine);
pro.StandardInput.Close();

Process[] fdtdProcs = Process.GetProcessesByName("FTDT");
int pid = fdtdProcs
            .OrderBy(x => (x.StartTime - targetTime).Duration()).First().Id;

或者通过记录前后的 PID:

var pidsBefore = Process.GetProcessesByName("FTDT").Select(x => x.Id).ToList();

pro.StandardInput.Write(temp + Environment.NewLine);
pro.StandardInput.Write(instruction + Environment.NewLine);
pro.StandardInput.Close();

var pidsAfter = Process.GetProcessesByName("FTDT")
                       .Select(x => x.Id)
                       .Except(pidsBefore);
int pid = pidsAfter.Single();

【讨论】:

  • 这将是cmd.exe的ID,还是已启动的FDTD.exe?
  • 我已经用一些可能的方式更新了我的代码来支持多个,并获得FDTD.exe而不是cmd.exe的PID。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-01
  • 2013-02-07
  • 2015-12-05
  • 2018-05-30
  • 1970-01-01
  • 2012-03-12
相关资源
最近更新 更多