Tty當設置了
當設置了stty tostop
時,為什麼不在同一個會話中的程序仍然可以寫入tty?
我有以下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 &
,兩者都foo
將bar
被停止。$$ 1 $$實際上,
echo
它是一個內置的 shell,它不作為一個單獨的程序執行。