使用 Powershell,我想做与 Unix 相当的事情
ps -auxc | grep Emacs
kill -9 364
(假设 365 是第一个命令告诉我的 pid。)
我该怎么做?我发现让 Powershell 告诉我进程的所有者非常困难,我尝试的方式是获取 wmi 对象 win32_process,然后将其放入名为“explorer.exe”的进程列表中,然后启动了许多 explorer.exe 实例。
答案1
我通过谷歌快速找到了这一点:
$owners = @{}
gwmi win32_process |% {$owners[$_.handle] = $_.getowner().user}
get-process | select processname,Id,@{l="Owner";e={$owners[$_.id.tostring()]}}
似乎按要求返回用户。您可能可以从那里继续。希望有所帮助。
答案2
使用 PowerShell 4 及更新版本,您可以执行以下操作:
Get-Process -IncludeUserName | Where-Object {$_.UserName -match "peter" -and $_.ProcessName -eq "Notepad"} | Stop-Process -Force
或者使用别名时:
ps -IncludeUserName | ? {$_.UserName -match "peter" -and $_.ProcessName -eq "Notepad"} | spps -Force
不像 Unix 那样短,但比旧版 PowerShell 更好。