我有以下 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。
还要注意“进程组”位;诸如SIGTTIN
、SIGTTOU
、等作业控制信号SIGINT
被发送到整个进程组/作业,而不仅仅是发送到有罪进程;在像 之类的管道中foo | bar &
,foo
和bar
都会被停止。
[1]实际上,echo
是一个内置的shell,它不作为单独的进程运行。