From 50c8c8276798fdb107862c6bd6912691a173890a Mon Sep 17 00:00:00 2001 From: Louis Pontoise Date: Thu, 27 Aug 2020 20:20:02 +0900 Subject: [PATCH] fix: ignore zombie processes --- src/api-wrappers/HelperExtensions.swift | 14 ++++++++++++++ src/logic/Applications.swift | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/api-wrappers/HelperExtensions.swift b/src/api-wrappers/HelperExtensions.swift index 50b2e885b..34b5ea656 100644 --- a/src/api-wrappers/HelperExtensions.swift +++ b/src/api-wrappers/HelperExtensions.swift @@ -1,4 +1,5 @@ import Cocoa +import Darwin extension Collection { // recursive flatMap @@ -172,3 +173,16 @@ extension NSImage { return dimmed } } + +extension pid_t { + func isZombie() -> Bool { + var kinfo = kinfo_proc() + var size = MemoryLayout.stride + var mib: [Int32] = [CTL_KERN, KERN_PROC, KERN_PROC_PID, self] + sysctl(&mib, u_int(mib.count), &kinfo, &size, nil, 0) + let command = withUnsafePointer(to: &kinfo.kp_proc.p_comm) { + String(cString: UnsafeRawPointer($0).assumingMemoryBound(to: CChar.self)) + } + return kinfo.kp_proc.p_stat == SZOMB + } +} diff --git a/src/logic/Applications.swift b/src/logic/Applications.swift index 7e3e5a9e2..c8b9c54f9 100644 --- a/src/logic/Applications.swift +++ b/src/logic/Applications.swift @@ -92,7 +92,7 @@ class Applications { } private static func isActualApplication(_ app: NSRunningApplication) -> Bool { - return app.activationPolicy != .prohibited || isNotXpc(app) + return (app.activationPolicy != .prohibited || isNotXpc(app)) && !app.processIdentifier.isZombie() } private static func isNotXpc(_ app: NSRunningApplication) -> Bool {