在GNU / Linux procfs中的其他地方是否引用了tty_nr?
作者:互联网
这是一个我一直试图解决的问题一段时间没有任何运气.我正在尝试编写一个脚本(其中包括)可以采用任意PID并将其映射到TTY设备的路径(如果没有关联的TTY,我写的函数将返回“(notty)”).
在我尝试上述操作时,我一直在尝试使用/ proc / [pid] / stat中的tty_nr:
tty_nr %d (7) The controlling terminal of the process. (The
minor device number is contained in the
combination of bits 31 to 20 and 7 to 0; the major
device number is in bits 15 to 8.)
我可以提取主要和次要数字,没问题.当我尝试将其转换为设备路径时,我的问题就出现了:我只是在/ dev下找一个匹配并接受第一个吗?有更优雅的方式吗?
我确实找到了this,似乎python脚本有某种tty_nr数字到物理路径的映射,但我找不到实际填充此列表的脚本的任何其他部分,以查看它们从哪里获取数据到看看我是否可以创建Linux模拟.它也可能取决于某些BSD-ism但我遇到了一堵砖墙.
基本上,如果我能帮助它,我试图不启动另一个过程.此外,整个“启动一个结果未知但仅采取第一个结果”的方法似乎有点…… kludgy.由于我必须向其他人展示此代码,我希望有一种或多或少的确定性方法来实现这一点.我想要保证,如果(出于任何原因)/ dev下面有多个设备文件与主要/次要(一种极端情况,我知道,但它会让我感到烦恼)我的代码将默认为任何通往TTY的“官方”路径是.
当然,如果我对提取 – 然后 – 搜索方法的非确定性的担忧是没有根据的,那将是个好消息,我只想了解为什么它们没有根据.所有其他方法都失败了我想我可以尝试限制搜索公共路径(/ dev / pts * / dev / tty *等),然后再转移到所有/ dev的扫描.
解决方法:
您可以从次要编号创建“官方”tty名称并检查其存在(当然还有主要/次要编号).如果次要编号是5,那么首先检查tty5是否存在并且具有正确的映射.如果任何一个失败,那么你必须搜索(并制定一个策略,如果存在多个匹配则返回什么).
编辑1:
来自Documentation / devices.txt:
3 char Pseudo-TTY slaves 0 = /dev/ttyp0 First PTY slave 1 = /dev/ttyp1 Second PTY slave ... 255 = /dev/ttyef 256th PTY slave These are the old-style (BSD) PTY devices; Unix98 devices are on major 136 and above. 4 char TTY devices 0 = /dev/tty0 Current virtual console 1 = /dev/tty1 First virtual console ... 63 = /dev/tty63 63rd virtual console 64 = /dev/ttyS0 First UART serial port ... 255 = /dev/ttyS191 192nd UART serial port
标签:bash,linux,shell-script 来源: https://codeday.me/bug/20190816/1670198.html