Làm thế nào để giết quá trình rượu vang khi chúng gặp sự cố hoặc sắp sụp đổ?


15

Đôi khi nó xảy ra khi một ứng dụng Wine gặp sự cố (làm chậm hệ thống và khiến nó gần như không sử dụng được). Trong hầu hết các trường hợp, tôi có thể hủy chương trình xkill, nhưng đôi khi tôi phải khởi động lại vì Ubuntu dường như không phản hồi tốt (điều duy nhất hoạt động là ALT+ F2, trình khởi chạy; xkillkhông). Tôi đã thử sử dụng wineboot -rhoặc -fchúng dường như không hoạt động tốt .. Nếu có gì đó không rõ ràng, hãy cho tôi biết tôi sẽ cố gắng giải thích rõ hơn :)

Câu trả lời:


13
killall nameofexefile.exe

giống như các quá trình linux


Đây chỉ là cho rượu hoặc cho tất cả quá trình chạy trong linux?
13

điều này sẽ giết bất kỳ quá trình, cửa sổ thông qua rượu vang hoặc linux
Conor Rynne

1
Vì vậy, máy chủ rượu vang -k sẽ giết tất cả các quy trình sản xuất rượu vang ... ý tôi là ... Tôi không sử dụng killall <file> .exe vì tôi thường không biết tên chính xác của tệp (và khi hệ thống phát điên Tôi sẽ không biết trong mọi trường hợp)
Hadden

ahhh ngay sau đó trong trường hợp đó máy chủ rượu vang -k có thể sẽ thực hiện công việc. Hãy cẩn thận, bạn không mở bất kỳ quy trình rượu vang nào khác, bao gồm các chương trình trong PlayOnLinux và Crossover.
Conor Rynne

34

Bạn có thể giết phiên rượu một cách an toàn thông qua ALT + F2 hoặc qua thiết bị đầu cuối bằng cách nhập

wineserver -k

Nếu nó thực sự không muốn tắt thì bạn có thể buộc nó qua

wineserver -k9

4

Chà, là một lập trình viên rượu vang, tôi thường sẽ nghiền ngẫm toàn bộ thứ chết tiệt đó, vì vậy tôi sử dụng kịch bản killwine siêu đặc biệt của mình. Đây là một cái chết khó khăn ( wineserver -klà cách tốt đẹp để làm điều đó và luôn luôn được ưa thích).

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

Điều này giả định rằng bạn đang có tiền tố rượu ~/.local/share/wine. Ví dụ sử dụng là:

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.

Tôi không biết, nhưng tôi không nghĩ rằng bạn sẽ thường kết thúc với nhiều quá trình khác nhau trong bộ nhớ (kịch bản này xử lý) trên một bản phát hành dàn dựng bình thường hoặc thậm chí bình thường, nhưng tôi làm khá nhiều vì hack máy chủ và ntdll.

EDIT: Tập lệnh này sẽ chỉ hoạt động trên HĐH dựa trên Linux và giả định rằng hệ thống tệp Proc được gắn trên / Proc, v.v.


Hoạt động như một bùa mê, trong khi máy chủ rượu vang -k hoặc -k9 không thành công.
Michael-AD

À, cảm ơn! Tôi dường như đã mất bản sao của kịch bản này và bây giờ tôi có nó một lần nữa! Tôi nên đề cập rằng điều này sẽ chỉ hoạt động trên hệ điều hành dựa trên Linux, vì nó đào qua / Proc.
Daniel Santos

2

Phiên bản của tôi:

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

Nó giết chết tất cả các quy trình rượu vang. Cảm ơn bài đăng này https://askubfox.com/a/732320/605355


lol, đó là một đoạn trong kịch bản của tôi! :) Họ chỉ thay đổi nó thành pipe thành xargs thay vì bash sub-shell - điều đó tốt bởi vì nó cũng sẽ hoạt động với / bin / sh. Mặc dù vậy, tôi vẫn có một số quy trình không chết, khi chúng bị treo trước khi hoàn thành công cụ init trong ntdll. Có lẽ tôi nên cố gắng gửi kịch bản của mình, hoặc một số hóa thân của nó vào dòng chính. EDIT: Ồ, tôi hiểu rồi, đó là phiên bản sửa đổi của bạn :)
Daniel Santos

1

Tôi chỉ có cùng một vấn đề. Lệnh này trong terminal đã giúp tôi. Nhấn Ctrl + Alt + t và sau đó viết như sau:
ps -x | grep "Your program name" | awk '{print $1}' | xargs kill

Tên chương trình của bạn nên được viết mà không có dấu ngoặc kép . Nó giúp tôi giải quyết oblivion.exe:
ps -x | grep Oblivion | awk '{print $1}' | xargs kill

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.