在PowerShell中进程的状态

时间:2014-08-01 11:01:35

标签: windows powershell process state status

Windows中的进程可以处于六种状态中的任何一种状态,即运行,就绪,阻塞,挂起,新建和退出。如何在Windows中使用PowerShell知道给定进程(名称,ID)的状态。 在UNIX中,此信息存储在/ proc / $ processid / status文件中。它在Windows中的位置或如何在PowerShell中获取此信息。

2 个答案:

答案 0 :(得分:1)

“退出”状态由“退出代码”属性(由GetExitCodeProcess()原生返回)表示。在PS中,它由HasExited中的ExitCodeGet-Process字段(别名ps)反映。

ps | where {$_.Id -eq <PID>} | select HasExited,ExitCode 
Windows中的“正在运行/等待/暂停”是status of a thread而不是进程(“暂停”是多个Wait substates之一)。我没有找到任何关于通过PS的内置方式获取线程信息的信息,但我们可以call the corresponding .NET functionality

$process=[System.Diagnostics.Process]::GetProcessById(<PID>)
$threads=$process.Threads
$threads | select Id,ThreadState,WaitReason

答案 1 :(得分:0)

你是对的,这是一个有趣的观点。一种通过以下方式了解流程状态的方法:

$ProcessActive = Get-Process outlook -ErrorAction SilentlyContinue
if($ProcessActive -eq $null)
{
 Write-host "I am not running"
}
else
{
 Write-host "I am running"
}

如果outlook不是正在运行的进程,则不会列出,但是-ErrorAction SilentlyContinue将继续并返回I am not running

如果它正在运行,它会向您发送I am running

我不知道某个过程的其他状态......至少不知道如何去除