ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

在GNU / Linux procfs中的其他地方是否引用了tty_nr?

2019-08-16 18:51:51  阅读:236  来源: 互联网

标签:bash linux shell-script


这是一个我一直试图解决的问题一段时间没有任何运气.我正在尝试编写一个脚本(其中包括)可以采用任意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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有