Si vous avez déjà fixé une boîte de dialogue flottante, une fenêtre de connexion bloquée ou un pop-up mystérieux sur macOS en vous demandant quel processus a créé cette fenêtre, vous n’êtes pas seul. La réponse n’apparaît ni dans le Finder ni dans le Dock, et Activity Monitor n’aide qu’en partie.
Réponse rapide
La méthode intégrée la plus fiable pour savoir quel processus possède une fenêtre précise sur macOS consiste à interroger Quartz Window Services avec CGWindowListCopyWindowInfo, à lire kCGWindowOwnerPID, puis à inspecter ce PID avec ps. Activity Monitor peut réduire la liste des suspects, mais Quartz donne la correspondance exacte entre une fenêtre et un processus.
Pourquoi c’est moins simple qu’il n’y paraît sur macOS
macOS ne propose pas de fonction évidente du type « clic droit sur cette fenêtre, afficher le PID ». Une seule application peut posséder plusieurs fenêtres, plusieurs processus auxiliaires et plusieurs agents d’arrière-plan. En plus, certaines fenêtres n’ont aucun titre visible, ce qui rend les suppositions manuelles peu fiables.
La documentation Apple explique aussi pourquoi. Dans un dictionnaire d’informations de fenêtre, kCGWindowOwnerPID est une clé obligatoire, alors que kCGWindowOwnerName et kCGWindowName sont optionnelles. Autrement dit, le PID du propriétaire est fiable, mais le nom de l’application ou le titre de la fenêtre peuvent manquer.
Méthode 1 : utiliser Activity Monitor si vous connaissez déjà l’application
Si vous avez déjà une bonne idée de l’application qui a créé la fenêtre, Activity Monitor est l’outil graphique intégré le plus rapide pour confirmer le processus.
Comment réduire la liste
- Ouvrez Activity Monitor depuis
/Applications/Utilities/. - Choisissez View > Windowed Processes pour afficher les processus capables de créer des fenêtres.
- Si vous avez besoin du contexte parent-enfant, choisissez View > All Processes, Hierarchically.
- Recherchez le nom de l’application, puis ouvrez sa fiche d’information ou notez son PID.
Cela suffit pour les cas courants du type : « Est-ce que ce pop-up vient de Safari, Slack ou d’une app auxiliaire ? »
Quand Activity Monitor ne suffit plus
Activity Monitor montre les processus capables de créer des fenêtres, mais pas une correspondance directe entre cette fenêtre précise et ce PID précis. Il devient bien moins fiable lorsque :
- une application lance plusieurs processus auxiliaires,
- le titre de la fenêtre ne correspond pas au nom de l’application,
- la fenêtre appartient à un agent d’arrière-plan,
- ou vous devez automatiser la recherche.
Pour une attribution exacte, utilisez Quartz.
Méthode 2 : utiliser Quartz Window Services pour associer des fenêtres à des PID
L’API Core Graphics d’Apple CGWindowListCopyWindowInfo renvoie les métadonnées des fenêtres à l’écran, y compris le PID du propriétaire. Vous pouvez l’appeler directement depuis une courte commande Swift sans créer d’application complète.
Lister les fenêtres visibles avec leur processus propriétaire
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"
Remplacez "Safari" par une partie du nom de l’application ou du titre de la fenêtre que vous cherchez à identifier. Si vous omettez le terme de recherche, la commande affiche toutes les fenêtres visibles qu’elle peut énumérer.
Ce que vous dit la sortie
- PID : l’identifiant du processus propriétaire issu de
kCGWindowOwnerPID - App : le nom du processus issu de
kCGWindowOwnerName - Window : le titre de la fenêtre issu de
kCGWindowName, s’il est disponible
Si votre vraie question est « Quel processus possède exactement cette fenêtre ? », c’est la meilleure approche intégrée.
Inspecter le processus une fois le PID obtenu
Une fois le PID récupéré, utilisez ps pour confirmer l’exécutable et la ligne de commande :
ps -p <PID> -o pid,ppid,comm,args
Exemple :
ps -p 1234 -o pid,ppid,comm,args
Vous pouvez ainsi passer d’une fenêtre suspecte au binaire exact, à son processus parent et à ses arguments de lancement.
Points importants à garder en tête
- Certaines fenêtres n’ont pas de titre, car
kCGWindowNameest optionnelle. - Les surcouches système et les panneaux utilitaires peuvent apparaître comme des fenêtres distinctes même lorsqu’ils appartiennent à la même application.
- En pratique, certaines applications protégées exposent moins de métadonnées tant que l’outil d’inspection n’a pas les autorisations de confidentialité macOS appropriées.
Méthode 3 : utiliser ProcXray pour une investigation interactive
Si vous faites cela régulièrement, les commandes brutes deviennent vite pénibles. ProcXray est plus adapté lorsque vous devez passer rapidement d’une fenêtre mystérieuse à tout le contexte du processus.
Pourquoi ProcXray est plus pratique pour le débogage répété
- Arborescence de processus en direct pour voir ce qui a lancé le processus propriétaire
- Inspection de la ligne de commande pour distinguer le processus principal de ses helpers
- Inspection des variables d’environnement pour révéler le contexte de lancement qu’Activity Monitor cache
- Capture des processus éphémères utile quand la fenêtre suspecte n’apparaît que brièvement
- Visibilité sur la signature de code pour juger plus vite si le processus est attendu, non signé ou suspect
Si la fenêtre appartient à un helper, à un programme de mise à jour ou à un outil d’arrière-plan transitoire, ce contexte est souvent plus important que le PID lui-même.
Vous pouvez aussi lire ces guides liés :
- Comment vérifier les processus en cours d’exécution sur Mac
- Comment surveiller les processus sur macOS : guide complet pour les développeurs
- ProcXray vs Activity Monitor
Activity Monitor vs Quartz vs ProcXray
| Méthode | Idéal pour | Points forts | Limites |
|---|---|---|---|
| Activity Monitor | Vérification visuelle rapide | Intégré, simple à utiliser, affiche les PID | N’associe pas directement une fenêtre arbitraire à son propriétaire |
| Requête Quartz sur les fenêtres | Correspondance exacte fenêtre → PID | API officielle, scriptable, précise | La sortie brute nécessite un suivi manuel |
| ProcXray | Investigations réelles et débogage fréquent | Ajoute la lignée, les variables d’environnement, les signatures et la visibilité sur les processus éphémères | Nécessite l’installation d’une autre application |
En bref : si vous avez besoin d’une réponse exacte une seule fois, la requête Quartz suffit. Si vous enquêtez régulièrement sur des fenêtres, des helpers et des processus éphémères, ProcXray est plus efficace.
FAQ
Activity Monitor peut-il montrer quel processus possède une fenêtre précise sur macOS ?
Pas directement. Activity Monitor peut filtrer sur les Windowed Processes et vous aider à inspecter les processus d’application probables, mais il ne fournit pas de correspondance en un clic entre une fenêtre donnée et son PID exact. Quartz Window Services est la méthode intégrée la plus précise.
Quelle est l’API Apple officielle pour trouver le processus propriétaire d’une fenêtre ?
Apple documente CGWindowListCopyWindowInfo comme la fonction Core Graphics qui permet de récupérer les métadonnées d’une fenêtre. Le dictionnaire renvoyé inclut kCGWindowOwnerPID comme clé obligatoire, ce qui en fait le champ canonique pour associer une fenêtre à son processus propriétaire.
Pourquoi le titre d’une fenêtre macOS est-il parfois vide ?
Parce que kCGWindowName est optionnelle et n’est pas garantie. Certaines fenêtres exposent le PID du propriétaire sans exposer de titre lisible par l’utilisateur. C’est normal pour beaucoup de fenêtres utilitaires, de surcouches système et de surfaces d’applications protégées.
Que faire après avoir trouvé le PID ?
Exécutez ps -p <PID> -o pid,ppid,comm,args pour confirmer le chemin de l’exécutable, le processus parent et les arguments de la ligne de commande. Si le processus semble toujours suspect, inspectez ensuite ses fichiers ouverts, son activité réseau et sa signature de code.
Sources et références
- 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
- Référence macOS intégrée :
man ps
Télécharger ProcXray gratuitement → — un moyen plus rapide d’enquêter sur le processus derrière une fenêtre suspecte.