如何判断正在使用哪个 WINEPREFIX

如何判断正在使用哪个 WINEPREFIX

当我运行时,是否有命令可以查看哪个 wineprefix 当前处于活动状态wine

答案1

从 Windows 环境“内部”,您可以读取环境变量WINEPREFIX。您可以通过以下方式执行此操作cmd

$ WINEPREFIX=/home/lesmana/tmp/somewineprefix wine cmd
(bunch of wine output)
Z:\home\lesmana> echo %WINEPREFIX%
/home/lesmana/tmp/somewineprefix

您可以使用cmd命令检查其他环境变量set

如果你没有启动 wine,WINEPREFIX那么就没有WINEPREFIX变量集。在这种情况下, wineprefix 应该是默认值 ( $HOME/.wine)。

我发现没有简单或官方的方法可以从 wine 环境“外部”获取 wineprefix。这是一个黑客:

首先你需要wineserver进程的PID:

$ pgrep -fl wineserver
5197 wineserver

然后你可以查看进程的环境变量:

$ cat /proc/5197/environ | tr '\0' '\n' | grep -i wine
WINEDLLOVERRIDES=winemenubuilder.exe=d;
WINEPREFIX=/home/lesmana/tmp/somewineprefix
_=/usr/bin/wine
WINELOADERNOEXEC=1

再说一次,如果你开始葡萄酒时没有WINEPREFIX那么就不会有任何WINEPREFIX变量。

或者,您可以检查进程的文件描述符:

$ ls -l /proc/5197/fd | grep wine
lr-x------ 1 lesmana users 64 25. Sep 15:27 114 -> /home/lesmana/tmp/somewineprefix/drive_c/windows
lr-x------ 1 lesmana users 64 25. Sep 15:27 32 -> /home/lesmana/tmp/somewineprefix/drive_c/windows
lr-x------ 1 lesmana users 64 25. Sep 15:27 4 -> /home/lesmana/tmp/somewineprefix
lr-x------ 1 lesmana users 64 25. Sep 15:27 48 -> /home/lesmana/tmp/somewineprefix/drive_c/windows/system32
lr-x------ 1 lesmana users 64 25. Sep 15:27 5 -> /tmp/.wine-1000/server-802-2e0ac4 (deleted)
l-wx------ 1 lesmana users 64 25. Sep 15:27 6 -> /tmp/.wine-1000/server-802-2e0ac4/lock (deleted)

有一个问题:如果有多个 wineserver 进程,那么您必须找出哪个 wineserver 属于哪个 wine 进程。我再次发现没有简单的方法来建立这种关联。我发现的唯一方法是检查进程的时间戳。

$ ps -ef
...
lesmana   5096  5085  0 22:33 pts/2    00:00:00 /bin/sh /home/lesmana/bin/wine cmd
lesmana   5097  5096  0 22:33 pts/2    00:00:00 cmd
lesmana   5100   614  0 22:33 ?        00:00:02 /usr/bin/wineserver
lesmana   5104   614  0 22:33 ?        00:00:00 C:\windows\system32\services.exe
lesmana   5110   614  0 22:33 ?        00:00:00 C:\windows\system32\explorer.exe /desktop
lesmana   5144   614  0 22:33 ?        00:00:03 C:\windows\system32\winedevice.exe
lesmana   5193  5093  0 22:34 pts/3    00:00:00 /bin/sh /home/lesmana/bin/wine cmd
lesmana   5194  5193  0 22:34 pts/3    00:00:00 cmd
lesmana   5197   614  0 22:34 ?        00:00:06 /usr/bin/wineserver
lesmana   5201   614  0 22:34 ?        00:00:00 C:\windows\system32\services.exe
lesmana   5207   614  0 22:34 ?        00:00:00 C:\windows\system32\explorer.exe /desktop
lesmana   5345   614  0 22:34 ?        00:00:03 C:\windows\system32\winedevice.exe
...

这里有两个 wine 进程和两个 wineserver 进程,启动间隔一分钟。如果需要,可以以ps秒为单位报告时间。

不幸的是,wineserver 进程是作为某种守护进程启动的,而不是 wine 进程的子进程。所以 PPID 没有运气。

相关内容