Sometimes the graphical user interface (GUI) of a program may become unresponsive, for example, if the program is waiting for an event that will never happen. The program may be waiting for input from a panel that the user cannot see, because it is hidden by another panel, or the program may be performing endless computations in the thread that is responsible to react to user interaction, and thus blocking the graphical user interface. In these cases the "Quit" entry in the main application menu will not work, since this depends on the GUI, and also the "Quit" from the application icon in the Dock will not work for the same reason, even the "Quit" from the "Activity Viewer" will be useless, because the "Quit" event handler cannot be notified.
The screenshot below shows a typical situation where neither the "Quit" menu entry in the Application menu nor the Dock item work.
What is to be done, if Aperture hangs, with all buttons and menus dead? "Force Quit" from the -menu or from the "Quit" menu in Activity Viewer is one way to circumvent the blocked GUI. It does not rely on the "Quit" event, but signals the Aperture Application to terminate, and in many cases you can get Aperture to quit this way.
Force quitting is not perfectly safe - the program may quit without closing open documents properly or finishing open database transactions. This may cause corruption to the Aperture library and the preference files and is to be avoided. You should always repair your Aperture Library after using Force Quit.
An alternative to "Force Quit" is sending signals directly to Aperture from the Terminal. Even if the graphical user interface is blocked or force quit is not accessible, you may be able to terminate Aperture by sending signals from the Terminal instead. This will work, if the reason for the "hang" is a blocked user interface, but not in all cases.
To send a "SIGTERM" signal, open a "Terminal" window (launch the Terminal application from the Utilities folder inside the Applications folder) and enter:
This will send the termination signal to the running program, similar to the signal send by Force Quit, and circumvent the blocked graphical user interface.
An example: While the "Print" Panel is active, neither the "Quit" menu entry nor the "Quit" from the Dock icon are possible, but "killall Aperture" will terminate the process.
The "SIGTERM" is a rather mild quit signal. The receiving process gets the chance to close open files, or to ignore the request.
But what to do, when the polite "SIGTERM" sent by "killall" has been ignored by Aperture and it refuses to quit?
Try different signals:
killall Aperture -SIGHUP
This will tell Aperture that the controlling process/Terminal has exited and Aperture will exit as well. But this signal might also be ignored by Aperture; also SIGINT (interrupt the process), SIGQUIT (terminate with a core dump) can be caught and ignored.
killall Aperture -SIGINT
killall Aperture -SIGQUIT
To send a stronger signal, that cannot be blocked and ignored by the receiving process in any way, try
killall Aperture -SIGSTOP
killall Aperture -SIGKILL
SIGSTOP will pause the program and SIGKILL is the ultimate terminator. It will kill the program immidiately without closing any files and cannot be blocked or trapped.
Any "kill" should always be followed by a "Repair" of the Aperture library, see Repairing and Rebuilding Your Aperture Library.