powershell 中的进程状态

问题描述 投票:0回答:3

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

windows powershell process state status
3个回答
2
投票

“退出”状态由“退出代码”属性的存在表示(由

GetExitCodeProcess()
本地返回)。在PS中,由
HasExited
(别名
ExitCode
)中的
Get-Process
ps
字段反映出来。

ps | where {$_.Id -eq <PID>} | select HasExited,ExitCode 

Windows 中的“运行/等待/暂停”是线程的状态而不是进程(“暂停”是几个等待子状态之一)。我没有找到任何关于通过 PS 内置方式获取线程信息的信息,但我们可以调用相应的.NET 功能

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

1
投票

你是对的,这是一个有趣的观点。了解流程状态的方法如下:

$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

我不知道流程的其他状态......至少不知道如何确定


0
投票

您可以尝试使用此 cmdlet 获取进程的所有可用信息:

Get-Process -Name <process name> | Format-List *

然后您可以尝试使用此 cmdlet 来查看该进程的状态,如果为 True 则表示它正在运行,如果为 false 则表示它没有运行

Get-Process -Name <process name> | select Responding

© www.soinside.com 2019 - 2024. All rights reserved.