Как убить винные процессы, когда они терпят крах или собираются потерпеть крах?

Иногда случается, что приложение Wine падает (замедляет работу системы и делает ее практически непригодной для использования). В большинстве случаев я могу убить программу с помощью xkill, но иногда мне приходится перезапускать, поскольку Ubuntu, кажется, не очень хорошо реагирует (единственное, что работает, это ALT + F2, программа запуска; xkill не делает '). т). Я пытался использовать wineboot -r или -f, но они, кажется, не очень хорошо работают. Если что-то неясно, дайте мне знать, я постараюсь объяснить лучше:)

13
задан 9 July 2012 в 18:34

44 ответа

У меня уже была такая же проблема. Эта команда в терминале помогла мне. Нажмите 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

1
ответ дан 6 August 2018 в 03:25

Ну, как винный программист, я часто запутываю всю эту чертову штуку, поэтому я использую свой суперспециальный скрипт killwine. Это тяжелая смерть (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 и предполагает, что файловая система proc смонтирована на / proc и т. д.

4
ответ дан 6 August 2018 в 03:25

Моя версия:

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

Это убивает все винные процессы. Благодаря этому посту https://askubuntu.com/a/732320/605355

1
ответ дан 7 August 2018 в 21:12

Вы можете безопасно завершить винные сессии либо через ALT + F2, либо через терминал, набрав

wineserver -k

Если он действительно не хочет выключаться, вы можете принудительно вызвать его через

wineserver -k9
24
ответ дан 7 August 2018 в 21:12

У меня уже была такая же проблема. Эта команда в терминале помогла мне. Нажмите 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

1
ответ дан 7 August 2018 в 21:12

Ну, как винный программист, я часто запутываю всю эту чертову штуку, поэтому я использую свой суперспециальный скрипт killwine. Это тяжелая смерть (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 и предполагает, что файловая система proc смонтирована на / proc и т. д.

4
ответ дан 7 August 2018 в 21:12

Моя версия:

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

Это убивает все винные процессы. Благодаря этому посту https://askubuntu.com/a/732320/605355

1
ответ дан 10 August 2018 в 09:30

Вы можете безопасно завершить винные сессии либо через ALT + F2, либо через терминал, набрав

wineserver -k

Если он действительно не хочет выключаться, вы можете принудительно вызвать его через

wineserver -k9
24
ответ дан 10 August 2018 в 09:30

У меня уже была такая же проблема. Эта команда в терминале помогла мне. Нажмите 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

1
ответ дан 10 August 2018 в 09:30

Ну, как винный программист, я часто запутываю всю эту чертову штуку, поэтому я использую свой суперспециальный скрипт killwine. Это тяжелая смерть (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 и предполагает, что файловая система proc смонтирована на / proc и т. д.

4
ответ дан 10 August 2018 в 09:30

Моя версия:

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

Это убивает все винные процессы. Благодаря этому посту https://askubuntu.com/a/732320/605355

1
ответ дан 13 August 2018 в 12:59
  • 1
    лол, это отрывок из моего сценария! :) Они просто изменили его на pipe для xargs вместо bash-sub-shell - это хорошо, потому что он также будет работать с / bin / sh. У меня все еще были некоторые процессы, которые не умирали, когда они зависали до завершения процесса инициализации процесса в ntdll. Может быть, я должен попытаться представить свой сценарий, или какое-то воплощение его в mainline. РЕДАКТИРОВАТЬ: О, я вижу, это ваша модифицированная версия :) – Daniel Santos 17 February 2018 в 16:11

Вы можете безопасно завершить винные сессии либо через ALT + F2, либо через терминал, набрав

wineserver -k

Если он действительно не хочет выключаться, вы можете принудительно вызвать его через

wineserver -k9
24
ответ дан 13 August 2018 в 12:59

У меня уже была такая же проблема. Эта команда в терминале помогла мне. Нажмите 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

1
ответ дан 13 August 2018 в 12:59

Ну, как винный программист, я часто запутываю всю эту чертову штуку, поэтому я использую свой суперспециальный скрипт killwine. Это тяжелая смерть (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 и предполагает, что файловая система proc смонтирована на / proc и т. д.

4
ответ дан 13 August 2018 в 12:59
  • 1
    Работает как шарм, в то время как wineserver -k или -k9 не удался. – Michael-A-D 4 January 2017 в 04:23
  • 2
    Ах, спасибо! Я, кажется, потерял свою копию этого сценария, и теперь у меня есть это снова! Я должен отметить, что это будет работать только на ОС на базе Linux, так как он просматривает / proc. – Daniel Santos 5 January 2017 в 08:55

Другие вопросы по тегам:

Похожие вопросы: