Bagaimana cara membunuh proses anggur ketika mereka crash atau akan crash?

15

Kadang-kadang terjadi bahwa aplikasi Wine crash (memperlambat sistem dan membuatnya hampir tidak dapat digunakan). Dalam kebanyakan kasus saya dapat mematikan program dengan xkill, tetapi kadang-kadang saya harus me-restart karena Ubuntu tampaknya tidak merespons dengan baik (satu-satunya hal yang berfungsi adalah ALT+ F2, peluncur; xkilltidak). Saya sudah mencoba menggunakan wineboot -ratau -ftetapi mereka sepertinya tidak berfungsi dengan baik .. Jika ada sesuatu yang tidak jelas, beri tahu saya saya akan mencoba menjelaskan dengan lebih baik :)

Hadden
sumber

Jawaban:

13
killall nameofexefile.exe

sama seperti proses linux

Conor Rynne
sumber
Apakah ini hanya untuk anggur atau untuk semua proses yang berjalan di linux?
13east
ini akan mematikan proses apa pun, windows via wine, atau linux
Conor Rynne
1
Jadi wineserver -k akan membunuh semua proses anggur ... itu yang saya maksudkan ... Saya tidak menggunakan killall <file> .exe seperti yang sering saya tidak tahu persis nama file (dan ketika sistem menjadi gila Saya tidak akan tahu dalam hal apapun)
Hadden
ahhh saat itu dalam hal ini Wineserver -k mungkin akan melakukan pekerjaan. Hanya hati-hati Anda tidak memiliki proses anggur lain terbuka, itu termasuk program di PlayOnLinux dan Crossover juga.
Conor Rynne
34

Anda dapat dengan aman membunuh sesi anggur baik melalui ALT + F2 atau melalui terminal dengan mengetik

wineserver -k

Jika benar-benar tidak ingin mematikan maka Anda dapat memaksanya melalui

wineserver -k9
kebebasan fosil
sumber
4

Yah, sebagai pemrogram anggur, saya sering akan mengacaukan semuanya, jadi saya menggunakan skrip killwine yang sangat spesial. Ini adalah kematian yang sulit ( wineserver -kadalah cara yang baik untuk melakukannya dan selalu disukai).

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

Ini mengasumsikan bahwa Anda sedang awalan anggur ~/.local/share/wine. Contoh penggunaan adalah:

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.

Saya tidak tahu, tapi saya tidak berpikir Anda akan sering berakhir dengan berbagai proses yang tergantung pada memori (apa script ini menangani) pada rilis pementasan + normal atau bahkan normal, tapi saya melakukan cukup banyak karena meretas server dan ntdll.

EDIT: Skrip ini hanya akan bekerja pada OS berbasis Linux dan mengasumsikan bahwa sistem file proc sudah terpasang pada / proc, dll.

Daniel Santos
sumber
Bekerja seperti pesona, sedangkan Wineserver -K atau -K9 tidak berhasil.
Michael-AD
Ahh terima kasih! Sepertinya saya kehilangan salinan naskah ini dan sekarang saya memilikinya lagi! Saya harus menyebutkan bahwa ini hanya akan bekerja pada OS berbasis Linux, karena menggali melalui / proc.
Daniel Santos
2

Versi saya:

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

Itu membunuh semua proses anggur. Berkat posting ini /ubuntu//a/732320/605355

Andrey Dovbyshko
sumber
lol, itu cuplikan dari skrip saya! :) Mereka hanya mengubahnya menjadi pipe ke xargs alih-alih bash sub-shell - itu bagus karena ini juga akan bekerja dengan / bin / sh. Saya masih memiliki beberapa proses tidak mati, ketika mereka menggantung sebelum menyelesaikan proses init stuff di ntdll. Mungkin saya harus mencoba mengirimkan skrip saya, atau beberapa inkarnasi ke garis utama. EDIT: Oh, begitu, itu versi modifikasi Anda :)
Daniel Santos
1

Saya baru saja akan memiliki masalah yang sama. Perintah di terminal ini membantu saya. Tekan Ctrl + Alt + t dan kemudian tulis yang berikut ini:
ps -x | grep "Your program name" | awk '{print $1}' | xargs kill

Nama program Anda harus ditulis tanpa tanda kutip , ini membantu saya memecahkan oblivion.exe:
ps -x | grep Oblivion | awk '{print $1}' | xargs kill

Luke359
sumber