当酒过程崩溃或将要崩溃时,如何杀死它们?


15

有时,会发生Wine应用程序崩溃的情况(降低系统速度,使其几乎不可用)。在大多数情况下,我可以使用杀死程序xkill,但是有时我必须重新启动,因为Ubuntu似乎响应不佳(唯一起作用的是ALT+ F2,启动器;xkill不能)。我已经尝试使用wineboot -r-f但是它们似乎无法很好地工作。

Answers:


13
killall nameofexefile.exe

就像linux进程


这仅适用于Wine还是Linux中所有正在运行的进程?
2011年

这将杀死所有进程,通过Wine或linux的Windows
Conor Rynne 2011年

1
所以wineserver -k将终止所有的wine进程...这就是我的意思...我不使用killall <file> .exe,因为我通常不知道文件的确切名称(以及当系统发疯时我不会在任何情况下都知道)
哈登

嗯,那么在这种情况下,wineserver -k可能会完成这项工作。请注意,您没有打开任何其他酒流程,其中也包括PlayOnLinux和Crossover中的程序。
Conor Rynne 2011年

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没有成功。
迈克尔·AD

啊,谢谢!我似乎丢失了该脚本的副本,现在又有了它!我应该提到,这只能在基于Linux的OS上使用,因为它会挖掘/ 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


大声笑,这是我脚本的摘录!:)他们只是将其更改为通过管道传递给xargs而不是bash子外壳程序-很好,因为它也可以与/ 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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.