How to kill wine processes when they crash or are going to crash?

You can safely kill wine sessions either via ALT+F2 or via a terminal by typing

wineserver -k

If it is really doesnt want to shutdown then you can force it via

wineserver -k9

killall nameofexefile.exe

just like linux processes


Well, as a wine programmer, I often will munge up the whole damn thing, so I use my super special killwine script. This is a hard death (wineserver -k is the nice way to do it and always preferred).

#!/bin/bash

wine_cellar="${HOME}/.local/share/wine"

if (($#)); then
    if [[ -e "${wine_cellar}/$1" ]]; then
        WINEPREFIX="${wine_cellar}/$1"
        shift
    elif [[ "${1:0:1}" != "-" ]]; then
        echo "ERROR: Didn't understand argument '$1'?" >&2;
        exit 1
    fi
fi

if ((${#WINEPREFIX})); then
    pids=$(
        grep -l "WINEPREFIX=${WINEPREFIX}$" $(
            ls -l /proc/*/exe 2>/dev/null |
            grep -E 'wine(64)?-preloader|wineserver' |
            perl -pe 's;^.*/proc/(\d+)/exe.*$;/proc/$1/environ;g;'
        ) 2> /dev/null |
        perl -pe 's;^/proc/(\d+)/environ.*$;$1;g;'
    )
else
    pids=$(
        ls -l /proc/*/exe 2>/dev/null |
        grep -E 'wine(64)?-preloader|wineserver' |
        perl -pe 's;^.*/proc/(\d+)/exe.*$;$1;g;'
    )
fi

if ((${#pids})); then
    set -x
    kill $* $pids
fi

This assumes that you're wine prefixes are under ~/.local/share/wine. Usage examples are:

killwine                       # Just kill all instances of wine
killwine -9                    # Hard kill them all
killwine lotro                 # Only kill wine under ${HOME}/.local/share/wine/lotro
killwine -INT lotro            # Same as above, but use SIGINT
WINEPREFIX=/tmp/crap killwine  # Kill only the instance under /tmp/crap
sudo reboot                    # Pretend you're running windows.

I don't know, but I don't think you'll often end up with various processes hung in memory (what this script takes care of) on a normal or even normal+staging release, but I do quite a lot because of hacking the server and ntdll.

EDIT: This script will only work on a Linux-based OS and assumes that the proc file system is mounted on /proc, etc.

Tags:

Wine