我需要一个允许我终止进程树进程的命令。
例如notepad.exe
是由资源管理器创建的。如何终止notepad.exe
进程树中的explorer.exe
?
答案 0 :(得分:6)
使用taskkill /IM <processname.exe> /T
。
答案 1 :(得分:2)
尝试PsTools set中的PsKill + PsList实用程序。
pslist -t
会为您提供一个流程树(在这里您可以找到notepad.exe
这是explorer.exe
的子流程。然后您可以使用pskill
来终止流程具有指定的ID。
答案 2 :(得分:2)
taskkill /F /IM notepad.exe
这会杀死所有notepad.exe
- 如果你想要一种方法来指定只杀死由notepad.exe
左右创建的foo.exe
,我不认为Windows命令行足够强大。
您可以使用tasklist
获取要定位的流程的流程ID,然后使用taskkill /F /PID <PID>
将其删除。
答案 3 :(得分:1)
此答案并不完全适合这种情况,但对于希望杀死整个进程树的人们来说可能很有用。我们需要在这里结合一些答案以获得正确的结果:杀死进程树并强制执行。
taskkill /IM "<process-name>" /T /F
对于某些进程,您需要在具有管理员权限的控制台应用程序中运行命令。
答案 4 :(得分:0)
如今,您可以使用PowerShell执行此操作:
$cimProcesses = Get-CimInstance -Query "select ProcessId, ParentProcessId from Win32_Process where Name = 'notepad.exe'"
$processes = $cimProcesses | Where-Object { (Get-Process -Id $_.ParentProcessId).ProcessName -eq "explorer" } | ForEach-Object { Get-Process -Id $_.ProcessId }
$processes.Kill()
或优雅的方式:
$cimProcesses = Get-CimInstance -Query "select ProcessId, ParentProcessId from Win32_Process where Name = 'notepad.exe'"
$cimProcesses = $cimProcesses | Where-Object { (Get-Process -Id $_.ParentProcessId).ProcessName -eq "explorer" }
$cimProcesses | ForEach-Object { taskkill /pid $_.ProcessId }