Questions tagged «pty»

伪终端(也称为“ pseudotty”或“ PTY”)是与tty一起使用的伪设备,其仿真器在用户空间中运行。将[tty]标记用于与广泛的(文本终端)相关的问题,将[console]标记用于与系统控制台有关的终端设备。

3
什么是伪终端(pty / tty)?
这可能是真正的基本问题,但我想彻底理解。 什么是伪终端?(tty / pty) 我们为什么需要它们?他们是如何引入的,有什么需要? 他们过时了吗?我们不再需要它们了吗?有什么替代它们的吗? 有有用的用例吗? 我做了什么: 阅读手册页-获得了一些信息,但没有确切的图片。 试图从Richard Stevens的Unix Network Programming中阅读它们。有一些信息,但没有why?一部分。
92 linux  terminal  pty 


4
每个伪终端(PTY)组件(软件,主控端,从属端)的职责是什么?
我试图找出一个tty是如何工作的1(每个元素的工作流程和职责)。我读了一些有趣的文章,但是仍然有一些模糊的地方。 到目前为止,这是我的理解: 仿真终端会对/dev/ptmx伪终端的master部分进行不同的系统调用。 伪终端的主机部分在中分配一个文件/dev/pts/[0-N],该文件对应于已过时的串行端口,并将从属伪终端“附加”到该文件。 从属伪终端保留诸如会话ID,前台作业,屏幕大小之类的信息。 这是我的问题: ptmx除了分配从属部分还有其他用途吗?它提供某种“智能”,还是仿真的终端(例如xterm)具有像终端一样的所有智能? 为什么xterm只与从属部分的stdout和stdin转发,所以它必须与主控部分进行交互?为什么它不能 直接从pts文件写入和读取? 会话ID是否总是附在一个pts文件上,反之亦然?我可以输入ps命令并为相同的/ dev / pts / X找到2个sessionId吗? pts商店还提供哪些其他信息?Xterm会自己更新所有字段,还是在其上ptm添加一些“智能”? 1.我的理解基于Linus Akesson揭秘的TTY和Andries Brouwer的Linux Kernel帖子,以及这些站点上的其他几个问题

6
如何诱使命令认为其输出将发送到终端
给定一条命令,该命令在其输出将输出到终端时会更改其行为(例如,产生彩色输出),如何在保留更改的行为的同时在管道中重定向该输出?必须有一个我不知道的实用程序。 某些命令(如grep --color=always)具有选项标志来强制执行该行为,但问题是如何解决仅依赖于测试其输出文件描述符的程序。 如果有关系的话,我的外壳bash在Linux上。
38 shell  pipe  utilities  stdout  pty 

2
Linux终端如何工作?
如果启动一个终端并调用一个可执行文件(为简单起见,假设它是面向行的),您将从可执行文件中得到对该命令的答复。如何打印给您(用户)?终端会做类似的事情pexpect吗?(轮询等待输出)还是什么?如何通知要输出的输出?终端如何启动程序?(这类似于python的os.fork()吗?)我不知道终端的工作方式,我一直在使用一些终端仿真器,但我仍然不了解所有这些魔术如何工作。我正在查看konsole(kde)和yakuake(可能使用konsole)的来源,我无法了解发生所有魔术的地方。

3
我们怎么知道谁在伪终端设备的另一端?
如果我这样做: echo foo > /dev/pts/12 某些进程foo\n将从其文件描述符读取该消息到主端。 有没有办法找出那个过程是什么? 换句话说,我如何找出哪个xterm / sshd / script / screen / tmux / expect / socat ...位于另一端/dev/pts/12? lsof /dev/ptmx会告诉我在任何pty的主端都有文件描述符的进程。进程本身可以使用ptsname()(TIOCGPTNioctl)根据自身对主端的fd查找从属设备,因此我可以使用: gdb --batch --pid "$the_pid" -ex "print ptsname($the_fd)" 对于lsof建立该映射所返回的每个pid / fd ,但是是否有更直接,可靠和较不麻烦的方式来获取该信息?

1
'script / dev / null'是做什么的?
每次我以root su用户身份登录VM并登录到用户帐户,并尝试使用screen它时都会引发错误: Cannot open your terminal '/dev/pts/0' - please check. 一个Stack Overflow帖子说我需要使用script /dev/null它来修复它,并且它可以工作,但是仍然不能解释为什么我需要输入script /dev/null。我想了解它的作用以及为什么要键入它。
21 terminal  gnu-screen  su  pty 

2
如何在Jenkins的Docker容器中运行构建
我正在尝试使用Jenkins在Docker容器中构建C ++项目。我在Jenkins或在Jenkins之外的容器中构建都没有问题。 下面是我尝试过的。为了清楚起见,我省略了卷映射。 情况1 以下命令在外壳中成功运行了构建。 docker run --rm --interactive=true --tty=true $IMAGE make 但是,当在Jenkins中作为“执行外壳程序”步骤运行时,Docker返回以下错误。 cannot enable tty mode on non tty input 情况二 以下命令与上一个命令相似,但是禁用了交互性。 docker run --rm $IMAGE make Jenkins可以成功运行构建。但是,中止构建时存在严重问题。该构建立即被标记为已中止,但是容器一直运行直到构建完成。退出后,也不会移除容器。 在shell中运行时,命令会成功构建,但是无法中断它。退出后,容器也将被取出。 题 有谁知道如何在Jenkins的Docker容器中干净地运行构建并保留中止构建的功能吗? 不能选择使用任何Jenkins插件,因为Docker调用位于脚本内并且无法轻松提取。
18 tty  docker  pty  jenkins 

3
当ssh客户端的参数后面是交互式程序时,为什么sshd不使用伪终端?
连接到SSH服务器的正常方法是ssh username@ip_address。但是用户可能只想在远程计算机上运行程序。因此,程序名称后跟普通参数ssh username@ip_address <program_name>。例如,ssh username@ip_address ls。除了交互式程序(还接受用户输入并提供输出)之外,该参数很好top。输出是 TERM环境变量未设置。 这意味着sshd和top程序之间没有连接(伪)终端。解决方法是-t在整个命令现在变为的地方添加参数ssh -t username@ip_address top。 我的问题是,为什么默认情况下sshd也不能使用伪终端与非交互式程序进行通信,因此无需-t为交互式程序添加参数?
11 ssh  pty 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.