와인 프로세스가 충돌하거나 충돌 할 때 와인 프로세스를 죽이는 방법은 무엇입니까?


15

때때로 Wine 응용 프로그램이 충돌하는 경우가 발생합니다 (시스템 속도가 느려지고 거의 사용할 수 없게됩니다). 대부분의 경우 나는 함께 프로그램을 죽일 수 있어요 xkill,하지만 언젠가 나는 우분투 아주 잘 응답하지 않는 것 같습니다으로 다시 시작했습니다 (작품이다 유일한 ALT+ F2, 런처, xkill하지 않습니다). 내가 사용 해봤 wineboot -r또는 -f하지만 그들은 뭔가 불분명 경우, 내가 내가 더 잘 설명하려고합니다 알려 .. 아주 잘 작동하지 않습니다 :)

답변:


13
killall nameofexefile.exe

리눅스 프로세스처럼


이것은 와인이나 리눅스에서 실행중인 모든 프로세스에만 해당됩니까?
13east

이것은 와인이나 리눅스를 통한 모든 프로세스, 창을 죽일 것입니다
Conor Rynne

1
그래서 wineserver -k는 모든 와인 프로세스를 죽일 것입니다 ... 내가 의미하는 바입니다 ... 파일의 정확한 이름을 모르는 경우 killall <file> .exe를 자주 사용하지 않습니다. 나는 어떤 경우에도 몰라요)
Hadden

그렇다면 그때 와인 서버 -k가 아마도 일을 할 것입니다. PlayOnLinux 및 Crossover의 프로그램을 포함하여 다른 와인 프로세스가 열려 있지 않도록주의하십시오.
코너 Rynne

34

ALT + F2 또는 터미널을 통해 와인 세션을 안전하게 종료 할 수 있습니다.

wineserver -k

실제로 종료하지 않으려면 다음을 통해 강제 종료 할 수 있습니다

wineserver -k9

4

글쎄, 와인 프로그래머로서 나는 종종 모든 것을 망쳐 놓을 것이므로 슈퍼 특수 킬 와인 스크립트를 사용합니다. 이것은 어려운 죽음입니다 ( wineserver -k좋은 방법이며 항상 선호합니다).

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

이것은 당신이 와인 접두사가 아래에 있다고 가정합니다 ~/.local/share/wine. 사용 예는 다음과 같습니다.

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.

잘 모르겠지만, 보통 또는 정상 + 스테이징 릴리스에서 메모리에 걸려있는 다양한 프로세스 (이 스크립트가 처리하는 것)로 끝나는 경우가 종종 있다고 생각하지 않지만 서버와 ntdll을 해킹.

편집 :이 스크립트는 Linux 기반 OS에서만 작동하며 proc 파일 시스템이 / proc 등에 마운트되어 있다고 가정합니다.


wineserver -k 또는 -k9는 성공하지 못했지만 매력처럼 작동합니다.
Michael-AD

아, 고마워요! 이 스크립트 사본을 잃어버린 것 같습니다. 이제 다시 작성했습니다! 나는 이것이 / proc를 통해 파고 들기 때문에 Linux 기반 OS에서만 작동한다는 것을 언급해야합니다.
Daniel Santos

2

내 버전 :

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

모든 와인 과정을 죽입니다. 이 게시물 덕분에 /ubuntu//a/732320/605355


lol, 내 스크립트의 스 니펫입니다! :) 방금 bash 서브 쉘 대신 xargs로 파이프로 변경했습니다 ./bin/sh에서도 작동하기 때문에 좋습니다. ntdll에서 프로세스 초기화 항목을 완료하기 전에 중단 될 때 여전히 일부 프로세스가 죽지 않았습니다. 어쩌면 나는 내 스크립트를 주형에 제출하려고 노력해야 할지도 모른다. 편집 : 아, 나는 그것이 수정 된 버전입니다 참조 :)
Daniel Santos

1

나는 단지 같은 문제를 겪고 있었다. 터미널 에서이 명령이 도움이되었습니다. Ctrl + Alt + t를 누르고 다음을 작성하십시오.
ps -x | grep "Your program name" | awk '{print $1}' | xargs kill

프로그램 이름은 따옴표없이 작성해야하며 oblivion.exe를 해결하는 데 도움이되었습니다.
ps -x | grep Oblivion | awk '{print $1}' | xargs kill

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.