Window-Manager

如何辨識 shell 或程序在哪個 xterm 中執行?

  • October 17, 2010

我通常使用帶有多個虛擬桌面和許多 xterm 的長時間執行的 X 會話。

我還在 shell (zsh) 中使用作業控制。

有時我希望我可以通過一個簡單的命令來辨識一個 shell 或程序正在執行(甚至暫停)的 xterm。

例如,您使用 vim 編輯文件,vim 會警告您該文件已被另一個仍在執行的 vim 實例打開。但是現在你已經忘記了這個程序 ID 為 XYZ 的 vim 是在哪個 xterm 中啟動和掛起的。殺死它不起作用,因為它被暫停了。通過信號恢復它然後殺死它可以工作,但它可能會搞砸一個在前台執行的程序,也許你不想殺死 vim 實例,因為它設置了幾個視窗……

目前我正在使用 awesomewm,但我也對其他 wms 的解決方案感興趣。

Xterm 將變數WINDOWID置於其子程序的環境中。它的值是 xterm 視窗的視窗 ID。沒有 POSIX 方法可以根據程序的 PID 查詢程序的環境;$pid這是查詢程序環境並提取WINDOWID變數的Linux方式:

</proc/$pid/environ gawk -v 'RS=\0' -F = '$1=="WINDOWID" {print $2}'

wmctrl然後,您可以使用或通過視窗管理器的界面查找或操作視窗。

如果您使用螢幕,首先嘗試STY設置為螢幕會話名稱的變數。您可以使用 連接到該會話screen -rd -S "$sessionname"

引用自:https://unix.stackexchange.com/questions/3197