Terminal
如何在標準輸出上獲得排他性
這是一個簡單的問題,但我找不到任何關於此的內容:
程序如何在目前虛擬終端的標準輸出上獲得排他性?
即:當執行兩個任務時,只有一個應該能夠寫入標準輸出。(如全屏 ncurses 安裝程序)。
謝謝。
該
stty tostop
設置使核心發送SIGTTOU
到嘗試寫入終端的後台程序。但是,程序可以忽略該信號。另一種方法可能是將應用程序連接到未使用的虛擬控制台。為此創建一個新使用者,使終端只能對該使用者訪問,並以該使用者身份執行程序。
編輯
這要容易得多:您不需要(實際上)不同的使用者。您只需要一個目前未使用的終端。通常,同一使用者的其他程序不會使用該終端,但您可以通過執行
chmod 000 /dev/tty
. 這對於正在執行的 shell 及其未來的子程序來說沒有問題,因為文件描述符已經打開並由子程序繼承。理論上,同一使用者的程序可以恢復權限,但他們不會這樣做。