Como matar processos de vinho quando eles falham ou vão falhar?

15

Às vezes acontece que um aplicativo Wine falha (diminuindo a velocidade do sistema e tornando-o quase inutilizável). Na maioria dos casos, sou capaz de matar o programa xkill, mas em algum momento tenho que reiniciar, pois o Ubuntu parece não responder muito bem (a única coisa que funciona é ALT+ F2, o iniciador; xkillnão). Eu tentei usar wineboot -rou -feles não parecem funcionar muito bem .. Se algo não estiver claro, avise-me que tentarei explicar melhor :)

Hadden
fonte

Respostas:

13
killall nameofexefile.exe

assim como processos linux

Conor Rynne
fonte
isso é apenas para vinho ou para todo o processo em execução no linux?
13east
isso vai matar qualquer processo, janelas via vinho, ou linux
Conor Rynne
1
Então, o vinhoserver -k matará todos os processos do vinho ... é o que eu quis dizer ... Eu não uso o killall <file> .exe tantas vezes que não sei o nome exato do arquivo (e quando o sistema fica louco) Em todo caso, não saberei)
Hadden
ahhh, nesse caso, o vinhoservidor -k provavelmente fará o trabalho. Apenas tome cuidado para não ter outros processos abertos, incluindo programas no PlayOnLinux e Crossover.
Conor Rynne
34

Você pode matar com segurança sessões de vinho via ALT + F2 ou através de um terminal digitando

wineserver -k

Se realmente não quiser desligar, você pode forçá-lo via

wineserver -k9
liberdade de expressão
fonte
4

Bem, como programador de vinhos, muitas vezes vou estragar tudo, então uso meu script super especial de killwine. Esta é uma morte difícil ( wineserver -ké a melhor maneira de fazê-lo e sempre a preferida).

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

Isso pressupõe que você esteja com prefixos de vinho ~/.local/share/wine. Exemplos de uso são:

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.

Não sei, mas acho que muitas vezes você acaba com vários processos travados na memória (do que esse script trata) em uma versão de teste normal ou até normal +, mas eu faço muito por causa de hackear o servidor e ntdll.

EDIT: Este script funcionará apenas em um sistema operacional baseado em Linux e pressupõe que o sistema de arquivos proc esteja montado em / proc, etc.

Daniel Santos
fonte
Funciona como um encanto, enquanto o vinhoservidor -k ou -k9 não teve sucesso.
Michael-AD
Ahh, obrigada! Parece que perdi minha cópia deste script e agora a tenho novamente! Devo mencionar que isso só funcionará em um sistema operacional baseado em Linux, conforme ele percorre / proc.
Daniel Santos
2

Minha versão:

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 os processos de vinho. Graças a este post /ubuntu//a/732320/605355

Andrey Dovbyshko
fonte
lol, isso é um trecho do meu script! :) Eles apenas mudaram para pipe para xargs em vez de um sub-shell bash - isso é bom porque também funcionará com / bin / sh. Eu ainda tive alguns processos que não morrem, quando eles travam antes de terminar o processo init stuff em ntdll. Talvez eu deva tentar enviar meu script, ou alguma encarnação dele para a linha principal. EDIT: Oh, eu vejo, essa é a sua versão modificada :)
Daniel Santos
1

Eu estava prestes a ter o mesmo problema. Este comando no terminal me ajudou. Pressione Ctrl + Alt + te escreva o seguinte:
ps -x | grep "Your program name" | awk '{print $1}' | xargs kill

O nome do seu programa deve ser escrito sem aspas , Isso me ajudou a resolver o oblivion.exe:
ps -x | grep Oblivion | awk '{print $1}' | xargs kill

Luke359
fonte