Terminal

如何在標準輸出上獲得排他性

  • May 22, 2020

這是一個簡單的問題,但我找不到任何關於此的內容:

程序如何在目前虛擬終端的標準輸出上獲得排他性?

即:當執行兩個任務時,只有一個應該能夠寫入標準輸出。(如全屏 ncurses 安裝程序)。

謝謝。

stty tostop設置使核心發送SIGTTOU到嘗試寫入終端的後台程序。但是,程序可以忽略該信號。

另一種方法可能是將應用程序連接到未使用的虛擬控制台。為此創建一個新使用者,使終端只能對該使用者訪問,並以該使用者身份執行程序。

編輯

這要容易得多:您不需要(實際上)不同的使用者。您只需要一個目前未使用的終端。通常,同一使用者的其他程序不會使用該終端,但您可以通過執行chmod 000 /dev/tty. 這對於正在執行的 shell 及其未來的子程序來說沒有問題,因為文件描述符已經打開並由子程序繼承。

理論上,同一使用者的程序可以恢復權限,但他們不會這樣做。

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