diff --git a/src/main/runtime/kun-serve-process-cleanup.test.ts b/src/main/runtime/kun-serve-process-cleanup.test.ts index 0f300ba11..ace70874a 100644 --- a/src/main/runtime/kun-serve-process-cleanup.test.ts +++ b/src/main/runtime/kun-serve-process-cleanup.test.ts @@ -48,7 +48,7 @@ describe('Kun serve process snapshot parsing', () => { ]))).toEqual([{ pid: 203, parentPid: 10, command: 'kun-runtime' }]) }) - it('uses UID-filtered ps on Unix and SID-filtered CIM on Windows', async () => { + it('uses UID-filtered ps on Unix and candidate-filtered CIM on Windows', async () => { const unixRun = vi.fn(async () => ({ stdout: '' })) await listCurrentUserProcesses({ platform: 'linux', @@ -68,6 +68,13 @@ describe('Kun serve process snapshot parsing', () => { ['-NoProfile', '-NonInteractive', '-Command', WINDOWS_CURRENT_USER_PROCESS_SCRIPT], expect.objectContaining({ windowsHide: true }) ) + expect(WINDOWS_CURRENT_USER_PROCESS_SCRIPT).toContain('-Filter') + expect(WINDOWS_CURRENT_USER_PROCESS_SCRIPT).toContain("Name = 'node.exe'") + expect(WINDOWS_CURRENT_USER_PROCESS_SCRIPT).toContain("Name = 'electron.exe'") + expect(WINDOWS_CURRENT_USER_PROCESS_SCRIPT).toContain("Name LIKE 'kun%.exe'") + expect(WINDOWS_CURRENT_USER_PROCESS_SCRIPT).not.toContain( + 'Get-CimInstance Win32_Process | ForEach-Object' + ) expect(WINDOWS_CURRENT_USER_PROCESS_SCRIPT).toContain('GetOwnerSid') expect(WINDOWS_CURRENT_USER_PROCESS_SCRIPT).toContain('$currentSid') }) diff --git a/src/main/runtime/kun-serve-process-cleanup.ts b/src/main/runtime/kun-serve-process-cleanup.ts index 62a69e305..124339cce 100644 --- a/src/main/runtime/kun-serve-process-cleanup.ts +++ b/src/main/runtime/kun-serve-process-cleanup.ts @@ -46,7 +46,8 @@ const PROCESS_TABLE_MAX_BUFFER = 16 * 1024 * 1024 export const WINDOWS_CURRENT_USER_PROCESS_SCRIPT = [ '$currentSid = [System.Security.Principal.WindowsIdentity]::GetCurrent().User.Value', - '$items = Get-CimInstance Win32_Process | ForEach-Object {', + "$candidates = Get-CimInstance Win32_Process -Filter \"Name = 'node.exe' OR Name = 'electron.exe' OR Name LIKE 'kun%.exe'\"", + '$items = $candidates | ForEach-Object {', ' $owner = Invoke-CimMethod -InputObject $_ -MethodName GetOwnerSid -ErrorAction SilentlyContinue', ' if ($owner.Sid -eq $currentSid) {', ' [pscustomobject]@{',