Як вбити процеси вина, коли вони розбиваються або збираються розбитися?


15

Іноді трапляється, що програма Wine виходить з ладу (уповільнює роботу системи і робить її майже непридатною). У більшості випадків я можу вбити програму за допомогою xkill, але колись я повинен перезапустити, оскільки Ubuntu, здається, не дуже добре реагує (єдине, що працює - це ALT+ F2, пускач; xkillні). Я намагався використовувати wineboot -rабо , -fале вони , здається, не працюють дуже добре .. Якщо що - то неясно, дайте мені знати , я постараюся пояснити краще :)

Відповіді:


13
killall nameofexefile.exe

подібно до процесів Linux


це тільки для вина чи для всього запущеного процесу в Linux?
13дв.

це знищить будь-який процес, вікна через вино чи Linux
Conor Rynne

1
Тож wineserver -k знищить усі винні процеси ... це те, що я мав на увазі ... я не використовую killall <file> .exe так часто, я не знаю точної назви файлу (і коли система зійде з розуму Я не буду знати в будь-якому випадку)
Hadden

ага, то в такому випадку винний сервер -к, ймовірно, зробить цю роботу. Будьте обережні, щоб у вас не було відкрито жодних винних процесів, що включає також програми в PlayOnLinux та Crossover.
Conor Rynne

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.

EDIT: Цей скрипт працюватиме лише на ОС на базі 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-під-оболонки - це добре, оскільки вона також працюватиме з / bin / sh. Я все ще мав деякі процеси не вмирати, хоча вони зависають до того, як закінчити процес, коли він буде в ntdll. Можливо, я повинен спробувати подати свій сценарій, або якесь втілення його в основну лінію. EDIT: О, я бачу, це ваша змінена версія :)
Даніель Сантос,

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.