Come uccidere i processi del vino quando si schiantano o stanno andando in crash?


15

A volte capita che un'applicazione Wine si blocchi (rallentando il sistema e rendendolo quasi inutilizzabile). Nella maggior parte dei casi sono in grado di uccidere il programma con xkill, ma a volte devo riavviare poiché Ubuntu sembra non rispondere molto bene (l'unica cosa che funziona è ALT+ F2, il lanciatore; xkillno). Ho provato a usare wineboot -ro -fma non sembrano funzionare molto bene .. Se qualcosa non è chiaro, fammi sapere proverò a spiegare meglio :)

Risposte:


13
killall nameofexefile.exe

proprio come i processi Linux


è solo per wine o per tutti i processi in esecuzione su Linux?
13east

questo ucciderà qualsiasi processo, Windows via Wine o Linux
Conor Rynne,

1
Quindi wineserver -k ucciderà tutti i processi del vino ... è quello che volevo dire ... Non uso killall <file> .exe come spesso non conosco il nome esatto del file (e quando il sistema impazzisce In ogni caso non lo saprò)
Hadden il

ahhh allora allora in questo caso il vino server -k probabilmente farà il lavoro. Fai solo attenzione a non avere altri processi vitali aperti, inclusi programmi anche in PlayOnLinux e Crossover.
Conor Rynne,

34

Puoi tranquillamente uccidere sessioni di vino tramite ALT + F2 o tramite un terminale digitando

wineserver -k

Se non si desidera davvero arrestarlo, è possibile forzarlo tramite

wineserver -k9

4

Beh, come programmatore di vini, spesso mi prendo in giro tutta la dannata cosa, quindi uso la mia sceneggiatura killwine super speciale. Questa è una morte difficile ( wineserver -kè il modo carino per farlo e sempre preferito).

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

Questo presuppone che i tuoi prefissi di vino siano sotto ~/.local/share/wine. Esempi di utilizzo sono:

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.

Non lo so, ma non penso che finirai spesso con vari processi sospesi nella memoria (di cosa si occupa questo script) in una versione normale o persino normale + messa in scena, ma faccio abbastanza a causa di hacking del server e ntdll.

EDIT: questo script funziona solo su un sistema operativo basato su Linux e presuppone che il file system proc sia montato su / proc, ecc.


Funziona come un incanto, mentre wineserver -k o -k9 non è riuscito.
Michael-AD

Ah grazie! Mi sembra di aver perso la mia copia di questo script e ora ce l'ho di nuovo! Devo dire che funzionerà solo su un sistema operativo basato su Linux, mentre scava attraverso / proc.
Daniel Santos,

2

La mia versione:

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

Uccide tutti i processi del vino. Grazie a questo post /ubuntu//a/732320/605355


lol, questo è un frammento della mia sceneggiatura! :) L'hanno appena cambiato in pipe in xargs invece che in una sub-shell bash - va bene perché funzionerà anche con / bin / sh. Tuttavia, alcuni processi non sono morti, quando si bloccano prima di terminare il processo init stuff in ntdll. Forse dovrei provare a inviare la mia sceneggiatura, o qualche sua incarnazione alla mainline. EDIT: Oh, capisco, questa è la tua versione modificata :)
Daniel Santos,

1

Stavo per avere lo stesso problema. Questo comando nel terminale mi ha aiutato. Premi Ctrl + Alt + t, quindi scrivi quanto segue:
ps -x | grep "Your program name" | awk '{print $1}' | xargs kill

Il nome del tuo programma deve essere scritto senza virgolette , mi ha aiutato a risolvere oblivion.exe:
ps -x | grep Oblivion | awk '{print $1}' | xargs kill

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.