这是一个简单的问题,但我找不到任何相关内容:
程序如何在当前虚拟终端上获得标准输出的独占权?
即:当运行两个任务时,只有一个任务能够写入标准输出。 (就像全屏 ncurses 安装程序)。
谢谢。
答案1
该stty tostop
设置使内核发送SIGTTOU
到尝试写入终端的后台进程。不过,进程可以忽略该信号。
另一种方法可能是将应用程序连接到未使用的虚拟控制台。为此创建一个新用户,使终端仅可供该用户访问,并以该用户身份运行程序。
编辑
这要容易得多:您(实际上)不需要不同的用户。您只需要一个当前未使用的终端。一般来说,同一用户的其他进程不会使用该终端,但您可以通过执行 来阻止除根进程之外的所有进程在那里写入chmod 000 /dev/tty
。这对于正在运行的 shell 及其未来的子进程来说没有问题,因为文件描述符已经打开并由子进程继承。
理论上,同一用户的进程可以恢复权限,但他们不会这样做。