Wie man Weinprozesse abbricht, wenn sie abstürzen oder abstürzen werden?

15

Manchmal stürzt eine Wine-Anwendung ab (verlangsamt das System und macht es fast unbrauchbar). In den meisten Fällen kann ich das Programm mit töten xkill, aber manchmal muss ich neu starten, da Ubuntu nicht sehr gut zu reagieren scheint (das einzige, was funktioniert, ist ALT+ F2, der Launcher; xkillfunktioniert nicht). Ich habe zu verwenden versucht , wineboot -roder -faber sie scheinen nicht sehr gut zu funktionieren .. Wenn etwas unklar ist, lassen Sie mich wissen , ich werde versuchen , es besser zu erklären :)

Hadden
quelle

Antworten:

13
killall nameofexefile.exe

Genau wie Linux-Prozesse

Conor Rynne
quelle
Ist dies nur für Wein oder für alle laufenden Prozesse unter Linux?
13.
Dies wird jeden Prozess, Fenster über Wein oder Linux töten
Conor Rynne
1
Also wird wineserver -k alle Weinprozesse abbrechen ... das habe ich gemeint ... Ich verwende nicht killall <file> .exe, da ich den genauen Namen der Datei nicht kenne (und wenn das System verrückt wird) Ich werde es auf keinen Fall wissen)
Hadden
ahhh genau dann wird wineserver -k wohl den job machen. Pass nur auf, dass keine anderen Weinprozesse geöffnet sind, einschließlich der Programme in PlayOnLinux und Crossover.
Conor Rynne
34

Sie können Weinsitzungen entweder mit ALT + F2 oder über ein Terminal sicher beenden, indem Sie Folgendes eingeben

wineserver -k

Wenn es wirklich nicht herunterfahren will, können Sie es über erzwingen

wineserver -k9
fossfreedom
quelle
4

Nun, als Weinprogrammierer werde ich oft die ganze verdammte Sache durcheinander bringen, also benutze ich mein ganz besonderes Killwine-Skript. Dies ist ein harter Tod ( wineserver -kist die nette Art und Weise und immer bevorzugt).

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

Dies setzt voraus, dass sich Ihre Weinpräfixe darunter befinden ~/.local/share/wine. Anwendungsbeispiele sind:

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.

Ich weiß es nicht, aber ich glaube nicht, dass bei einer normalen oder sogar normalen + Staging-Version häufig verschiedene Prozesse im Speicher hängen bleiben (worum kümmert sich dieses Skript?), Aber ich mache aufgrund dessen ziemlich viel Hacken des Servers und Ntdll.

BEARBEITEN: Dieses Skript funktioniert nur auf einem Linux-basierten Betriebssystem und setzt voraus, dass das proc-Dateisystem unter / proc usw. gemountet ist.

Daniel Santos
quelle
Funktioniert wie ein Zauber, während die Weinserver -k oder -k9 nicht erfolgreich waren.
Michael-AD
Ahh, danke! Ich habe anscheinend meine Kopie dieses Skripts verloren und jetzt habe ich es wieder! Ich sollte erwähnen, dass dies nur auf einem Linux-basierten Betriebssystem funktioniert, da es sich durch / proc bewegt.
Daniel Santos
2

Meine 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

Es tötet alle Weinprozesse. Vielen Dank für diesen Beitrag /ubuntu//a/732320/605355

Andrey Dovbyshko
quelle
lol, das ist ein Ausschnitt aus meinem Drehbuch! :) Sie haben es soeben geändert, dass es anstelle einer bash-Sub-Shell eine Pipe zu xargs gibt - das ist gut, weil es auch mit / bin / sh funktioniert. Ich habe immer noch einige Prozesse nicht sterben, wenn sie hängen, bevor der Prozess init Zeug in Ntdll abgeschlossen. Vielleicht sollte ich versuchen, mein Skript oder eine Inkarnation davon an mainline zu senden. EDIT: Oh, ich verstehe, das ist Ihre modifizierte Version :)
Daniel Santos
1

Ich hatte gerade das gleiche Problem. Dieser Befehl im Terminal hat mir geholfen. Drücken Sie Strg + Alt + t und schreiben Sie dann Folgendes:
ps -x | grep "Your program name" | awk '{print $1}' | xargs kill

Ihr Programmname sollte ohne Anführungszeichen geschrieben sein . Es hat mir beim Lösen von oblivion.exe geholfen:
ps -x | grep Oblivion | awk '{print $1}' | xargs kill

Luke359
quelle