¿Cómo matar los procesos del vino cuando se bloquean o se van a bloquear?

15

A veces sucede que una aplicación Wine se bloquea (ralentizando el sistema y haciéndolo casi inutilizable). En la mayoría de los casos, puedo eliminar el programa xkill, pero a veces tengo que reiniciar, ya que Ubuntu parece no responder muy bien (lo único que funciona es ALT+ F2, el iniciador; xkillno). He intentado usar wineboot -ro, -fpero parece que no funcionan muy bien. Si algo no está claro, hágamelo saber que intentaré explicar mejor :)

Hadden
fuente

Respuestas:

13
killall nameofexefile.exe

al igual que los procesos de Linux

Conor Rynne
fuente
¿Es esto solo para vino o para todo el proceso de ejecución en Linux?
13 de
esto matará cualquier proceso, ventanas a través de vino o linux
Conor Rynne
1
Así que wineserver -k matará todos los procesos de vino ... es lo que quise decir ... No uso killall <file> .exe tan a menudo que no sé el nombre exacto del archivo (y cuando el sistema se vuelve loco) En ningún caso lo sabré)
Hadden
Ahhh, en ese caso, el servidor de vinos -k probablemente hará el trabajo. Solo tenga cuidado de no tener otros procesos de vino abiertos, eso incluye programas en PlayOnLinux y Crossover también.
Conor Rynne
34

Puede matar de forma segura las sesiones de vino ya sea a través de ALT + F2 o mediante un terminal escribiendo

wineserver -k

Si realmente no quiere apagarse, puede forzarlo a través de

wineserver -k9
fossfreedom
fuente
4

Bueno, como programador de vinos, a menudo voy a enredar todo el asunto, así que uso mi súper especial script killwine. Esta es una muerte dura ( wineserver -kes la mejor manera de hacerlo y siempre la preferí).

#!/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

Esto supone que sus prefijos de vino están debajo ~/.local/share/wine. Ejemplos de uso son:

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.

No lo sé, pero no creo que a menudo termines con varios procesos colgados en la memoria (de lo que se ocupa este script) en una versión de puesta en escena normal o incluso normal, pero lo hago bastante debido a pirateando el servidor y ntdll.

EDITAR: este script solo funcionará en un sistema operativo basado en Linux y supone que el sistema de archivos proc está montado en / proc, etc.

Daniel Santos
fuente
Funciona a las mil maravillas, mientras que el servidor de vinos -k o -k9 no tuvo éxito.
Michael-AD
Ahh, gracias! Parece que perdí mi copia de este script y ahora lo tengo de nuevo. Debo mencionar que esto solo funcionará en un sistema operativo basado en Linux, ya que cava a través de / proc.
Daniel Santos
2

Mi version:

ls -l /proc/*/exe 2>/dev/null | grep -E 'wine(64)?-preloader|wineserver' | perl -pe 's;^.*/proc/(\d+)/exe.*$;$1;g;' | xargs -n 1 kill

Mata todos los procesos del vino. Gracias a esta publicación /ubuntu//a/732320/605355

Andrey Dovbyshko
fuente
jajaja, eso es un fragmento de mi guión! :) Simplemente lo cambiaron a pipe a xargs en lugar de un sub-shell bash, eso es bueno porque también funcionará con / bin / sh. Sin embargo, todavía tengo algunos procesos que no mueren, cuando se cuelgan antes de terminar el proceso init stuff en ntdll. Tal vez debería intentar enviar mi script, o alguna encarnación de él a la línea principal. EDITAR: Oh, ya veo, esa es tu versión modificada :)
Daniel Santos
1

Estaba a punto de tener el mismo problema. Este comando en la terminal me ayudó. Presione Ctrl + Alt + t y luego escriba lo siguiente:
ps -x | grep "Your program name" | awk '{print $1}' | xargs kill

El nombre de su programa debe escribirse sin comillas . Me ayudó a resolver oblivion.exe:
ps -x | grep Oblivion | awk '{print $1}' | xargs kill

Lucas359
fuente