如何检查具有给定ID的进程是否仍然存在?

时间:2011-03-11 06:55:38

标签: .net wolfram-mathematica

美好的一天,

我是.NET的新用户,我通过Wolfram Mathematica 使用NETLink包访问.NET。我需要定义一个.NET函数,它返回具有给定ID的进程是否仍然存在的信息。

通过NETLink定义.NET功能的典型方法如下:

Needs["NETLink`"];
LoadNETType["System.Diagnostics.Process"];
killProc[procID_] := (
    proc = Process`GetProcessById[procID];
    proc@Kill[]
    );

上面的代码定义了使用ID killProc[procID]终止进程的函数procID。如何定义一个只检查之前具有此ID <的进程是否仍然存在的函数?此过程的定义可能应该在过程仍然存在的时刻完成。在某个时刻,我只想检查它是否仍然存在。

2 个答案:

答案 0 :(得分:2)

试试此代码段

Process myProcess = Process.GetProcessById( processId );
if( myProcess == null )
{
  //does not exist
}
else
{
  //process still exists
}

修改

我现在仔细检查,似乎我弄错了。如果找不到进程,Process.GetProcessById不返回null,而是给出Argument exception。您应该使用此代码段:

public void ProcessExists( int myProcessId )
{
  return Process.GetProcesses().Where( p => p.Id == myProcessId).Any());
}

答案 1 :(得分:2)

解决方案是使用属性HasExited

Needs["NETLink`"];
LoadNETType["System.Diagnostics.Process"];
proc = Process`GetProcessById[procID];

proc@HasExited

这是我搜索的内容。