【发布时间】:2014-11-06 22:11:46
【问题描述】:
用户进程使用 3 个文件描述符与终端通信。终端在unix中被视为文件(例如/dev/tty),并且还具有文件描述符,主要,次要编号供内核识别。所以内核通过终端与用户进程进行通信。另一种通信方式是通过我们都知道的系统调用。
假设用户进程正在等待输入(例如:enter two numbers: _ _)。当我们在键盘上按下 1 和 2 时,键盘缓冲区被填满,与键盘关联的设备驱动程序将识别它并唤醒等待队列中的进程。那么这些数据(即1 和2)是如何提供给用户进程的呢?我猜它会通过终端。
如果重定向输出会发生什么,例如$ ./a.out > file?我已使用isatty() 检查该进程未与任何终端关联。那么内核将如何与用户进程交互呢?假设我的程序需要一些键盘输入。
【问题讨论】:
-
终端本身被内核特殊处理。有进程组,组的前台进程获取控制台输入。您可以使用screen 之类的东西将多个程序置于前台。除了终端的性质之外,我看不出你的问题是什么没有很多重复?
标签: linux process terminal kernel