Tty

當設置了stty tostop時,為什麼不在同一個會話中的程序仍然可以寫入tty?

  • November 11, 2019

我有以下shell互動:

[OP@localhost linux]$ tty
/dev/pts/7
[OP@localhost linux]$ stty tostop
[OP@localhost linux]$

在另一個終端中,我輸入:

[OP@localhost linux]$ echo hello > /dev/pts/7

回到原來的,我看到:

[OP@localhost linux]$ tty
/dev/pts/7
[OP@localhost linux]$ stty tostop
[OP@localhost linux]$ hello

為什麼是這樣?不應該停止回顯過程嗎?

這是termios(3)手冊頁所說的:

TOSTOP

SIGTTOU信號發送到試圖寫入其控制終端後台程序的程序組

你的echo過程

$$ 1 $$不是後台程序,並且不會嘗試寫入控制 tty。 還要注意“程序組”位;像SIGTTIN, SIGTTOU,SIGINT等這樣的作業控制信號被發送到整個程序組/作業,而不僅僅是有罪程序;在類似的管道中foo | bar &,兩者都foobar被停止。

$$ 1 $$實際上,echo它是一個內置的 shell,它不作為一個單獨的程序執行。

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