如何判斷正在使用哪一個 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 沒有運氣。

相關內容