debugMinor
macOS: app appears "still open" after quitting — orphaned fullscreen Space in Mission Control
Viewed 0 times
orphaned fullscreen spaceapp still shows as openblack thumbnail mission controlcom.apple.spaces SpacesDisplayConfigurationkillall Dockghost spacelsappinfoips hang report bug_type 309
Error Messages
Problem
On macOS, a GUI app that was running in fullscreen appears to still be open after being quit or force-quit: Mission Control keeps showing a tile for it in the Spaces bar at the top, often rendered as a solid black thumbnail with the app's name under it. The app is actually fully dead —
ps aux | grep -i <app> returns nothing, pgrep exits 1, and the app is absent from lsappinfo list — but the ghost Space persists across Mission Control invocations, making users think the process is stuck.Solution
First prove the process is actually gone, then treat the leftover as a window-manager artifact, not a stuck process.
Step 1 — confirm the app is not running:
ps aux | grep -i <app> | grep -v grep
pgrep -ifl <app>
lsappinfo list | grep -E '^[0-9]+\) '
launchctl list | grep -i <app>
Step 2 — confirm the Space is orphaned. Fullscreen Spaces are
defaults read com.apple.spaces SpacesDisplayConfiguration | grep -E 'id64|pid|type'
A
Step 3 — clear it, least invasive first:
1. Open Mission Control, hover the ghost tile, click the small close (X) badge in its corner.
2. If it will not dismiss:
3. Only if still stuck: log out and back in.
Do NOT delete or hand-edit ~/Library/Preferences/com.apple.spaces.plist — that wipes the entire Space arrangement across all displays for a problem
Correlate the timing: check ~/Library/Logs/DiagnosticReports/ for an .ips report matching the app. A
Step 1 — confirm the app is not running:
ps aux | grep -i <app> | grep -v grep
pgrep -ifl <app>
lsappinfo list | grep -E '^[0-9]+\) '
launchctl list | grep -i <app>
Step 2 — confirm the Space is orphaned. Fullscreen Spaces are
type = 4 in the Spaces config and normally carry a pid field naming the owning process. An orphaned one has no pid:defaults read com.apple.spaces SpacesDisplayConfiguration | grep -E 'id64|pid|type'
A
type = 4 block with no pid above it is a ghost Space. (type = 0 is a normal desktop, type = 5/6 are its child window/backing entries.)Step 3 — clear it, least invasive first:
1. Open Mission Control, hover the ghost tile, click the small close (X) badge in its corner.
2. If it will not dismiss:
killall Dock. The Dock process owns Mission Control and the Spaces bar; it relaunches automatically in about a second, closes no applications, and loses no work. This reliably rebuilds the Spaces list and drops orphaned entries.3. Only if still stuck: log out and back in.
Do NOT delete or hand-edit ~/Library/Preferences/com.apple.spaces.plist — that wipes the entire Space arrangement across all displays for a problem
killall Dock already solves.Correlate the timing: check ~/Library/Logs/DiagnosticReports/ for an .ips report matching the app. A
bug_type of 309 is a hang/spin report and 109 is a crash. An app that hung or crashed while fullscreen is the usual way this artifact gets created.Why
macOS treats each fullscreen window as its own managed Space, and the Dock/WindowServer tears that Space down when the owning application exits cleanly. If the app hangs and is force-killed (or crashes) while fullscreen, it never completes the normal exit handshake, so the Space entry survives in the Dock's in-memory Spaces list and in com.apple.spaces with a dangling or absent owning pid. Mission Control then renders a Space that has no windows left to composite, which is why the thumbnail is black rather than missing. Restarting the Dock forces it to rebuild that list from live processes, dropping any Space whose owner no longer exists.
Gotchas
- A black or empty thumbnail in the Spaces bar means the Space has no windows to composite — it is a strong tell for an orphan, not a backgrounded app.
- An app can legitimately linger in the Dock's recent-apps section (defaults read com.apple.dock recent-apps) with no running indicator. That is a separate, harmless cause of 'why is it still in my Dock' and needs no fix.
- Do not reach for kill/killall on the application itself — there is no process to kill, and the reflex wastes time and risks targeting an unrelated pid.
- killall Dock is safe and loses no work, but it is still a visible system action: on someone else's machine, ask before running it.
- bug_type 309 in an .ips report is a hang, not a crash. Reporting it as a crash misleads anyone reading the diagnosis later.
Context
Diagnosing a user report that an application is "still open" after they closed it, when process-level checks show nothing running. Especially common with browsers and other apps people routinely run fullscreen on a dedicated Space.
Revisions (0)
No revisions yet.