tty_nrはGNU / Linux procfsの他の場所で参照されていますか?

tty_nrはGNU / Linux procfsの他の場所で参照されていますか?

これは運が悪く、しばらく自分で解決しようとした問題です。任意のPIDを取得し、それをTTYデバイスのパスにマッピングできるスクリプトを作成しようとしています(関連するTTYがない場合、私が作成した関数は「(notty)」を返します)。 。

上記の操作を実行しようとしたときに、次を使用しようとしました。tty_nr/proc/から[PID]/統計:

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.)

問題なくプライマリ番号とセカンダリ番号を取得できます。私の問題は、デバイスパスに変換しようとしたときに発生します。find/ devでのみ一致し、最初の一致を許可しますか?これを行うよりエレガントな方法はありますか?

私が見つけたこれPythonスクリプトにはtty_nr番号を物理パスにマッピングする一種のマッピングがあるようですが、実際にこのリストを満たすスクリプトの他の部分が見つからないため、データをどこから取得するかを確認し、Linuxエミュレーション。いくつかのBSD主義に頼ることも可能ですが、私はそれに苦労しています。

基本的に役立つ場合は、他のプロセスを開始しないようにしてください。また、「不明な数の結果を実行しますが、最初の結果のみを取得する」という全体的なアプローチは少しです。このコードを他の人に見せる必要があるので、これを行うためのやや決定的な方法が欲しいです。 (何らかの理由で)/ devの下にそのメジャー/マイナーを含む複数のデバイスファイルがある場合(わかっていますが、これは極端なケースですが迷惑です)、私のコードはデフォルトでTTYの「公式」が何であるかを指定します。パスはです。

もちろん、抽出の非決定的特性と検索方法に関する私の懸念が根拠がなかったら、良いニュースになるでしょう。ただそれが根拠がない理由を理解したいだけです。他のすべての方法は失敗しました。すべての/devをスキャンする前に、検索を通常のパス(/dev/pts* /dev/tty*など)に制限してみることができると思いました。

ベストアンサー1

セカンダリ番号に基づいて「公式」tty名を作成し、それが存在することを確認できます(もちろん、プライマリ/マイナー番号付き)。マイナー番号が5の場合は、まずtty5が存在し、正しいマッピングがあることを確認してください。これらのいずれかが失敗した場合は検索する必要があります(そして、一致するものが複数ある場合は何を返すか戦略を立てる必要があります)。

編集1:

からDocumentation/devices.txt

三者医師TTYスレーブ
      0 = /dev/ttyp0 最初のPTYスレーブデバイス
      1 = /dev/ttyp1 2番目のPTYスレーブ
        ...
    255 = /dev/ttyef 256番目のPTYスレーブ

    これはレガシー(BSD)PTYデバイスです。
    デバイスは主に136以上です。


4文字TTYデバイス
      0 = /dev/tty0 現在の仮想コンソール

      1 = /dev/tty1 最初の仮想コンソール
        ...
     63 = /dev/tty63 63番目の仮想コンソール
     64 = /dev/ttyS0 最初の UART シリアルポート
        ...
    255 = /dev/ttyS191 192番目のUARTシリアルポート

おすすめ記事