答案1
通过控制终端,进程可以告诉内核哪个进程组是前台进程组(在同一会话中)。如果终端有前台进程组,我们可以通过终端控制前台进程组,例如Ctrl-C/Ctrl-\来终止前台进程组。 (一个终端可能只有一个前台进程组,也可能没有,准确地说,一个终端只能关联一个进程会话。)
使用控制终端,即使您已经将 stdin 重定向到其他位置/文件,您仍然可以从控制终端读取/写入/dev/tty
.这个特殊文件是内核中当前进程控制终端的同义词。如果您的进程没有关联的控制终端,则打开此文件将失败。您可以对这个文件做什么?例如,某些程序需要用户在执行某些操作之前输入密码,例如用于登录或加密的程序。这些程序可能会禁止用户从标准输入输入密码,这意味着即使您将他们的标准输入重定向到随机文件,他们仍然会等待您的输入。原因是他们都打开/dev/tty来读取。
总而言之,通过控制终端,内核知道如果有人需要终端生成的信号和终端输入,该将终端生成的信号和终端输入传递到哪里。就这样。
因此,如果进程不想被任何终端控制,并且不想从“/dev/tty”读取/写入(就像大多数守护程序一样),则没有必要与控制终端关联)。然而,从 shell 内启动的通用进程总是与控制终端关联,因为它是 shell 会话的成员,当 shell 启动时,它已经建立了控制终端。 (实际上,随机进程不能将终端附加为控制终端,只有会话领导进程可以。)