系统相关
首页 > 系统相关> > 在GNU / Linux procfs中的其他地方是否引用了tty_nr?

在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