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.