Windows中的进程可以处于六种状态中的任何一种状态,即运行,就绪,阻塞,挂起,新建和退出。如何在Windows中使用PowerShell知道给定进程(名称,ID)的状态。 在UNIX中,此信息存储在/ proc / $ processid / status文件中。它在Windows中的位置或如何在PowerShell中获取此信息。
答案 0 :(得分:1)
“退出”状态由“退出代码”属性(由GetExitCodeProcess()
原生返回)表示。在PS中,它由HasExited
中的ExitCode
和Get-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
我不知道某个过程的其他状态......至少不知道如何去除