You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写适用于Unix平台的PowerShell KillChildren函数

跨平台PowerShell版KillChildren函数实现

原Windows平台的KillChildren函数依赖Windows专属的Get-CimInstance cmdlet,无法在macOS/Linux等Unix类系统运行。以下是单文件跨平台版本,通过PowerShell内置的平台自动变量区分逻辑分支,无需维护多套脚本:

function KillChildren {
    Param (
        [Parameter(Position = 0, Mandatory, ValueFromPipeline)]
        [int[]]$ProcessId,

        [switch]$PassThru
    )

    process {
        foreach ($p in $ProcessId) {
            # 根据平台获取子进程ID
            $childPids = if ($IsWindows) {
                # Windows分支:保留原逻辑,排除conhost进程
                Get-CimInstance -Class Win32_Process -Filter "ParentProcessId = '$p' AND NOT Name LIKE 'conhost%'" -Property ProcessId |
                    Select-Object -ExpandProperty ProcessId
            } else {
                # Unix分支(macOS/Linux):使用ps命令获取子进程
                # 输出格式:PID PPID,过滤PPID等于目标PID的进程,提取PID
                ps -eo pid,ppid | Where-Object { $_ -match "^(\d+)\s+$p$" } | ForEach-Object { $matches[1] }
            }

            # 递归处理子进程的子进程,然后终止
            if ($childPids) {
                $childPids | KillChildren -PassThru | ForEach-Object {
                    Stop-Process -Id $_ -ErrorAction Ignore -Force
                }
            }

            # 若指定PassThru,输出当前PID
            if ($PassThru) {
                $p
            }
        }
    }
}

关键细节说明

  • 平台区分逻辑:使用PowerShell 7+内置的自动变量$IsWindows、$IsMacOS、$IsLinux自动判断运行环境,无需手动指定。
  • Windows分支:完全保留原函数的Get-CimInstance逻辑,确保原有功能不受影响,同时排除conhost进程(避免误杀控制台关联进程)。
  • Unix分支:
    • 利用Unix系统原生的ps命令获取进程列表,-eo pid,ppid指定输出进程ID(PID)和父进程ID(PPID)。
    • 通过正则匹配筛选出父ID等于目标PID的进程,提取子进程ID。
    • 统一使用PowerShell跨平台cmdletStop-Process终止进程,保证逻辑一致性。
  • 递归与PassThru:保持原函数的递归处理逻辑(先杀最深层的子进程,再回溯),-PassThru参数功能与原版本完全一致,会输出所有被处理的进程ID。

使用示例

# 获取目标进程ID
$targetPid = (Get-Process -Name "SomeProcess").Id

# 杀掉该进程的所有子进程,同时输出被处理的PID列表
KillChildren -ProcessId $targetPid -PassThru

内容的提问来源于stack exchange,提问作者Grant Birchmeier

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 15:25:10