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

15

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

Хэдден
источник

Ответы:

13
killall nameofexefile.exe

так же, как процессы Linux

Конор Ринн
источник
это только для вина или для всех запущенных процессов в Linux?
13
это убьет любой процесс, Windows через вино или Linux
Конор Ринн
1
Так что wineserver -k уничтожит все процессы Wine ... это то, что я имел в виду ... Я не использую killall <file> .exe, так как часто не знаю точное имя файла (и когда система сходит с ума Я не буду знать в любом случае)
Хадден
аааа, тогда в этом случае Wineserver -k, вероятно, сделает эту работу. Только будьте осторожны, у вас нет других открытых винных процессов, включая программы в PlayOnLinux и Crossover.
Конор Ринн
34

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

wineserver -k

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

wineserver -k9
свобода ископаемых
источник
4

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

Даниэль Сантос
источник
Работает как шарм, в то время как wineserver -k или -k9 не удался.
Michael-AD
Ах, спасибо! Я, кажется, потерял свою копию этого сценария, и теперь у меня есть это снова! Я должен отметить, что это будет работать только на ОС на базе Linux, так как он просматривает / proc.
Даниэль Сантос
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

Андрей Довбышко
источник
лол, это фрагмент моего сценария! :) Они просто изменили его на pipe для xargs вместо bash-sub-shell - это хорошо, потому что он также будет работать с / bin / sh. У меня все еще были некоторые процессы, которые не умирали, когда они зависали до завершения процесса инициализации процесса в ntdll. Может быть, я должен попытаться представить свой сценарий, или какое-то воплощение его в mainline. РЕДАКТИРОВАТЬ: О, я вижу, это ваша модифицированная версия :)
Даниэль Сантос
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

Luke359
источник