Si alguna vez te has quedado mirando un cuadro de diálogo flotante, una ventana de inicio de sesión bloqueada o una ventana emergente misteriosa en macOS y te has preguntado qué proceso creó esa ventana, no eres el único. La respuesta no es evidente desde el Finder ni el Dock, y Activity Monitor solo ayuda hasta cierto punto.
Respuesta rápida
La forma integrada más fiable de averiguar qué proceso posee una ventana concreta en macOS es consultar Quartz Window Services con CGWindowListCopyWindowInfo, leer el kCGWindowOwnerPID de la ventana y, a continuación, inspeccionar ese PID con ps. Activity Monitor puede acotar la búsqueda, pero Quartz proporciona la correspondencia precisa entre ventana y proceso.
Por qué esto es más difícil de lo que parece en macOS
macOS no ofrece una función obvia del tipo «haz clic derecho en esta ventana y muéstrame el PID». Una sola app puede poseer varias ventanas, varios procesos auxiliares y varios agentes en segundo plano. Además, algunas ventanas no tienen título visible, lo que hace que las conjeturas manuales sean poco fiables.
La documentación de Apple explica por qué. En un diccionario de información de ventana, kCGWindowOwnerPID es una clave obligatoria, mientras que kCGWindowOwnerName y kCGWindowName son opcionales. Eso significa que el PID del propietario es fiable, mientras que el nombre de la app y el título de la ventana pueden faltar en algunas ventanas.
Método 1: usa Activity Monitor cuando ya sabes qué app es
Si ya puedes deducir qué app creó la ventana, Activity Monitor es la herramienta gráfica integrada más rápida para confirmar el proceso.
Cómo acotar la lista
- Abre Activity Monitor desde
/Applications/Utilities/. - Elige View > Windowed Processes para mostrar los procesos capaces de crear ventanas.
- Si necesitas contexto de relación padre-hijo, elige View > All Processes, Hierarchically.
- Busca el nombre de la app y luego abre su panel de información o anota su PID.
Esto resulta útil para casos comunes como «¿este pop-up viene de Safari, Slack o de una app auxiliar?».
Cuándo Activity Monitor se queda corto
Activity Monitor muestra procesos capaces de crear ventanas, no una correspondencia directa entre esta ventana exacta y ese PID exacto. Se vuelve mucho menos fiable cuando:
- una app genera varios procesos auxiliares,
- el título de la ventana no coincide con el nombre de la app,
- la ventana pertenece a un agente en segundo plano,
- o necesitas automatizar la búsqueda con un script.
Para la propiedad exacta de la ventana, usa Quartz.
Método 2: usa Quartz Window Services para asignar ventanas a PIDs
La API de Core Graphics de Apple CGWindowListCopyWindowInfo devuelve metadatos de las ventanas en pantalla, incluido el PID propietario. Puedes invocarla directamente desde un breve comando de Swift sin crear una app completa.
Lista las ventanas visibles con su proceso propietario
swift -e '
import Foundation
import CoreGraphics
let query = CommandLine.arguments.dropFirst().joined(separator: " ").lowercased()
let windows = CGWindowListCopyWindowInfo(
[.optionOnScreenOnly, .excludeDesktopElements],
kCGNullWindowID
) as? [[String: Any]] ?? []
for window in windows {
let owner = (window[kCGWindowOwnerName as String] as? String) ?? ""
let pid = (window[kCGWindowOwnerPID as String] as? Int) ?? 0
let title = (window[kCGWindowName as String] as? String) ?? ""
guard !owner.isEmpty else { continue }
guard query.isEmpty ||
owner.lowercased().contains(query) ||
title.lowercased().contains(query) else { continue }
print("PID: \(pid)\tApp: \(owner)\tWindow: \(title)")
}
' "Safari"
Sustituye "Safari" por parte del nombre de la app o del título de la ventana que intentas identificar. Si omites el término de búsqueda, el comando imprime todas las ventanas actualmente visibles que puede enumerar.
Qué te dice la salida
- PID: el ID del proceso propietario, obtenido de
kCGWindowOwnerPID - App: el nombre del proceso, obtenido de
kCGWindowOwnerName - Window: el título obtenido de
kCGWindowName, cuando está disponible
Este es el mejor enfoque integrado cuando tu verdadera pregunta es «¿Qué proceso posee esta ventana exacta?».
Inspecciona el proceso una vez que tengas el PID
Una vez que tengas el PID, usa ps para confirmar el ejecutable y la línea de comandos:
ps -p <PID> -o pid,ppid,comm,args
Ejemplo:
ps -p 1234 -o pid,ppid,comm,args
Esto te permite pasar de una ventana sospechosa al binario exacto, al proceso padre y a los argumentos de arranque.
Advertencias importantes
- Algunas ventanas tienen el título en blanco porque
kCGWindowNamees opcional. - Las superposiciones del sistema y los paneles de utilidades pueden aparecer como ventanas separadas aunque pertenezcan a la misma app.
- En la práctica, las apps protegidas pueden revelar menos metadatos hasta que la herramienta de inspección disponga de los permisos de privacidad adecuados de macOS.
Método 3: usa ProcXray para investigaciones interactivas
Si haces esto a menudo, los comandos en bruto se vuelven tediosos. ProcXray es mejor cuando necesitas pasar rápidamente de una ventana misteriosa al contexto completo del proceso.
Por qué ProcXray es mejor para depurar de forma recurrente
- El árbol de procesos en vivo muestra qué lanzó el proceso propietario.
- La inspección de la línea de comandos ayuda a distinguir los procesos auxiliares de la app principal.
- La inspección de variables de entorno revela el contexto de arranque que Activity Monitor oculta.
- La captura de procesos efímeros ayuda cuando la ventana sospechosa solo aparece brevemente.
- La visibilidad de la firma de código te ayuda a decidir si el proceso es esperado, sin firmar o sospechoso.
Si la ventana pertenece a un proceso auxiliar, un actualizador o una herramienta transitoria en segundo plano, ese contexto importa más que el PID por sí solo.
Quizá también te interesen estas guías relacionadas:
- Cómo comprobar qué procesos se están ejecutando en el Mac
- Cómo monitorizar procesos en macOS: una guía completa para desarrolladores
- ProcXray frente a Activity Monitor
Activity Monitor frente a Quartz frente a ProcXray
| Método | Ideal para | Puntos fuertes | Limitaciones |
|---|---|---|---|
| Activity Monitor | Confirmación visual rápida | Integrado, fácil de usar, muestra los PIDs | No asigna una ventana arbitraria directamente a su propietario |
| Consulta de ventanas con Quartz | Búsqueda exacta de ventana a PID | API oficial, automatizable, precisa | La salida en bruto requiere seguimiento manual |
| ProcXray | Investigaciones reales y depuración recurrente | Añade linaje, variables de entorno, firmas y visibilidad de procesos efímeros | Requiere instalar otra app |
En resumen: si necesitas una respuesta exacta una sola vez, usa la consulta de Quartz. Si investigas ventanas, procesos auxiliares y procesos efímeros de forma habitual, usa ProcXray.
Preguntas frecuentes
¿Puede Activity Monitor mostrar qué proceso posee una ventana concreta en macOS?
No directamente. Activity Monitor puede filtrar por Windowed Processes y ayudarte a inspeccionar los procesos de app más probables, pero no ofrece una asignación con un solo clic de una sola ventana a su PID exacto. Quartz Window Services es el método integrado más preciso.
¿Cuál es la API oficial de Apple para encontrar el proceso propietario de una ventana?
Apple documenta CGWindowListCopyWindowInfo como la función de Core Graphics para recuperar metadatos de ventanas. El diccionario devuelto incluye kCGWindowOwnerPID como clave obligatoria, lo que lo convierte en el campo canónico para asignar una ventana a su proceso propietario.
¿Por qué a veces el título de una ventana de macOS está en blanco?
Porque kCGWindowName es opcional, no está garantizado. Algunas ventanas exponen el PID del propietario, pero no un título visible para el usuario. Esto es normal en muchas ventanas de utilidades, superposiciones del sistema y superficies de apps protegidas.
Después de encontrar el PID, ¿qué debo hacer a continuación?
Ejecuta ps -p <PID> -o pid,ppid,comm,args para confirmar la ruta del ejecutable, el proceso padre y los argumentos de la línea de comandos. Si el proceso sigue pareciendo sospechoso, inspecciona a continuación sus descriptores de archivo, su actividad de red y su firma de código.
Fuentes y referencias
- Apple Developer:
CGWindowListCopyWindowInfo - Apple Developer: Required Window List Keys
- Apple Developer: Optional Window List Keys
- Apple Support: View information about Mac processes in Activity Monitor
- Apple Support: Activity Monitor User Guide
- Referencia integrada de macOS:
man ps
Descarga ProcXray gratis → — una forma más rápida de investigar el proceso que hay detrás de una ventana sospechosa.