How to gracefully kill (close) programs and processes via command line

Some programs allow you to close them gracefully, asking you if you want to save your data, or log off before the programs is closed. This can also disable crash recovery dialogs, like in Firefox. This can be true of graphically programs as well as console programs. The term for closing programs in Linux/Unix is kill.

Graphical programs
Using a program called wmctrl, you can close programs the way they are meant to be shutdown. wmctrl has many other uses besides this, but for this howto, the close functions is all we care about.

Usage
 * -c 
 * Close the window  gracefully.
 *  is a string, piece of text, in the tile bar. It is NOT case sensitive.
 * Example:
 * For window title: theory of evolution - OpenOffice.org Writer
 *  could be: openoffice

Example
 * You want to close OpenOffice.org
 * The title of the window is theory of evolution - OpenOffice.org Writer
 * Execute: wmctrl -c openoffice
 * If the file is unsaved, it will pop-up, Do you want to save.
 * Note it will only close one instance of OpenOffice, so if you have two files open, you would need to run it twice.

Console programs
To close console programs you use the kill command. Kill has a bunch of different signals that can be sent to a programs to initial a close.


 * Kill signals
 * Common kill signal
 * All signals
 * signal(7) man

It is not always obvious what kill signal will close the program gracefully so it is likely you will have to test out different signals, and figure out which signal closes the programs better. If you are lucky the programs user man will give you a hint.

Example
 * You want to close, rtorrent, allow it to first close all connections
 * The user guide states:  SIGINT: Normal shutdown with 5 seconds to send the stopped request to trackers.
 * SIGINT is #2
 * Execute: kill -2 `pidof rtorrent`
 * To make a nice script for it
 * 1) !/bin/bash

if -n `pidof rtorrent` ;then echo "rtorrent is open, time to die (gracefully)...." kill -2 `pidof rtorrent` fi
 * 1) rtorrent

Close command for specific programs
if -n `pidof firefox` ;then WID=`xdotool search "Mozilla Firefox" | head -1` xdotool windowactivate --sync $WID xdotool key --clearmodifiers ctrl+q fi if -n `pidof VirtualBox` ;then WID=`VBoxManage list runningvms|sed 's/.*{//'|sed 's/}//'` VBoxManage controlvm $WID savestate fi
 * rtorrent
 * kill -2 `pidof rtorrent`
 * Firefox
 * To close a single window of Firefox
 * wmctrl -c Firefox
 * To quit Firefox, entirely (closing all windows)
 * OpenOffice.org
 * wmctrl -c openoffice
 * If you have multiple instances of OpenOffice, you need to execute the close command more than once
 * LibreOffice
 * wmctrl -c libreoffice
 * If you have multiple instances of OpenOffice, you need to execute the close command more than once
 * Galeon
 * galeon -q
 * Gimp
 * wmctrl -c gimp
 * Inkscape
 * wmctrl -c inkscape
 * Psi
 * wmctrl -c psi
 * Rhythmbox
 * rhythmbox-client—quit
 * qBittorrent
 * wmctrl -c qBittorrent
 * Transmission
 * wmctrl -c Transmission
 * Pidgin
 * purple-remote "quit"
 * VirtualBox
 * Some untested commands
 * Gnome
 * gnome-session-save—kill
 * Openbox
 * openbox—exit
 * Fluxbox
 * fluxbox-remote "Exit"
 * XFCE
 * xfce4-session-logout

Script to close many programs gracefully
Say you want to make a shutdown script, you can add this to close programs gracefully.


 * 1) !/bin/bash

if -n `pidof rtorrent` ;then echo "rtorrent is open, time to die (gracefully)...." (kill -2 `pidof rtorrent` &) fi
 * 1) rtorrent

if -n `pidof firefox` ;then echo "closing firefox..." WID=`xdotool search "Mozilla Firefox" | head -1` xdotool windowactivate --sync $WID xdotool key --clearmodifiers ctrl+q fi
 * 1) mozilla firefox...

if -n `pidof galeon` ;then echo "closing galeon..." (galeon -q &) fi
 * 1) galeon...

if -n `pidof soffice.bin` ;then echo "closing openOffice (if its open)..." (wmctrl -c OpenOffice &) fi
 * 1) openoffice.org

if -n `pidof soffice.bin` ;then echo "closing LibreOffice..." (wmctrl -c LibreOffice &) fi
 * 1) LibreOffice

if -n `pidof inkscape` ;then echo "closing Inkscape..." (wmctrl -c Inkscape &) fi
 * 1) Inkscape

echo "closing Gimp (if its open)..." (wmctrl -c gimp &)
 * 1) Gimp

echo "closing pidgin (if its open)..." (purple-remote "quit" &)
 * 1) Pidgin...

echo "closing Transmission (if its open)..." (wmctrl -c Transmission &)
 * 1) Transmission...

echo "Closing qBittorrent (if its open)..." (wmctrl -c qBittorrent &)
 * 1) qBittorrent

if -n `pidof VirtualBox` ;then WID=`VBoxManage list runningvms|sed 's/.*{//'|sed 's/}//'` VBoxManage controlvm $WID savestate fi