在Unix中,从终端启动的进程如果被放到后台,通常就无法读取或写入其终端。在其他情况下,当进程无法读/写其终端(或其他文件描述符)时,它会简单地阻塞,并在读取或写入完成后继续运行。对于被放到后台的进程,它会收到SIGTTIN或SIGTTOU信号,这默认会挂起该进程。如果稍后将该进程置于前台,则shell会继续运行它。
为什么要设计成这样呢?阻塞文件描述符比信号容易处理得多,因为它们通常根本不需要特殊处理。在涉及终端连接无法处理数据速率等情况的其他情况下,进程只会被阻塞。如果进程需要知道这一点,它可以检查自己是否在前台。那么,这种设计当时有哪些优势呢?
当然,由于历史原因,这种行为现在已经成为POSIX的一部分,因此现在已经固定了。但是,这些历史原因是什么呢?
为什么要设计成这样呢?阻塞文件描述符比信号容易处理得多,因为它们通常根本不需要特殊处理。在涉及终端连接无法处理数据速率等情况的其他情况下,进程只会被阻塞。如果进程需要知道这一点,它可以检查自己是否在前台。那么,这种设计当时有哪些优势呢?
当然,由于历史原因,这种行为现在已经成为POSIX的一部分,因此现在已经固定了。但是,这些历史原因是什么呢?