当设置`stty tostop`时,为什么不在同一会话中的进程仍然可以写入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

为什么是这样?不应该停止 echo 过程吗?

答案1

手册页是这样termios(3)说的:

TOSTOP

SIGTTOU信号发送至进程组的一个后台进程它试图写入其控制终端

您的echo进程[1]不是后台进程,并且不会尝试写入它是控制 tty。

还要注意“进程组”位;诸如SIGTTINSIGTTOU、等作业控制信号SIGINT被发送到整个进程组/作业,而不仅仅是发送到有罪进程;在像 之类的管道中foo | bar &foobar都会被停止。

[1]实际上,echo是一个内置的shell,它不作为单独的进程运行。

相关内容