Retour au blog

Comment savoir quel processus possède une fenêtre sur macOS

Découvrez comment identifier le processus auquel appartient une fenêtre précise sur macOS avec Activity Monitor, les API de fenêtre Quartz, le Terminal et ProcXray.

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

  1. Ouvrez Activity Monitor depuis /Applications/Utilities/.
  2. Choisissez View > Windowed Processes pour afficher les processus capables de créer des fenêtres.
  3. Si vous avez besoin du contexte parent-enfant, choisissez View > All Processes, Hierarchically.
  4. 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 :

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

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

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é

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 :

Activity Monitor vs Quartz vs ProcXray

MéthodeIdéal pourPoints fortsLimites
Activity MonitorVérification visuelle rapideIntégré, simple à utiliser, affiche les PIDN’associe pas directement une fenêtre arbitraire à son propriétaire
Requête Quartz sur les fenêtresCorrespondance exacte fenêtre → PIDAPI officielle, scriptable, préciseLa sortie brute nécessite un suivi manuel
ProcXrayInvestigations réelles et débogage fréquentAjoute la lignée, les variables d’environnement, les signatures et la visibilité sur les processus éphémèresNé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

Télécharger ProcXray gratuitement → — un moyen plus rapide d’enquêter sur le processus derrière une fenêtre suspecte.