Signals故意創建一個不響應
故意創建一個不響應_NET_WM_PING
的圖形程序
有時我很好奇視窗管理器如何處理不響應的應用程序
_NET_WM_PING
,例如彈出視窗顯示“您要終止此應用程序嗎? ”這對於調試 圖形應用程序和了解各種應用程序如何處理不同的信號和不同的視窗管理器 與應用程序互動。例如:
kwin
具有該Client::pingWindow()
功能,並顯示“您要終止此應用程序嗎? ”消息。mutter
具有該meta_display_ping_window
功能,並顯示“應用程序未響應”消息。xfwm4
有一個clientSendNetWMPing
功能,並顯示“此視窗可能正忙,沒有響應”消息。我想故意觸發這些行為,並能夠執行無響應的程序
strace
以查看它接收到的信號。我正在考慮 Python/Tkinter 或例如 bash/zenity 腳本,但我對其他可能性持開放態度。理想情況下,該程序不會使 CPU 飽和,但這不會破壞交易。(請注意,這SIGSTOP
不會從視窗管理器中觸發所需的行為。)有什麼簡單而可靠的方法來故意創建一個不響應
_NET_WM_PING
並因此引起視窗管理器注意的圖形程序?
確切的答案將取決於框架等。
所有 GUI 框架上的通用“執行緒”是一個中央/主事件處理程序,它接收重繪、鍵盤和滑鼠輸入等的事件/請求。
那就是處理程序,您可以在其中處理不會響應但處於緊密
while true; do nothing; done
循環中的事件。
你可以用幾行程式碼搞定一個 GUI 應用程序,然後將它包裝在能捕捉到你信號的東西中。Tkinter 與 python say 非常簡單。看這裡