答え1
Xtermはすでに/dev/ptmx
開いていますが、これは見ることができません。理由は次のとおりです。
実行xterm
権限にはS_ISGID
(set-group-ID)ビットが設定されており、グループが所有していますutmp
。
この方法は、エントリを(および正確なパスはシステムによって異なる場合があります)xterm
に追加することによってセッションがまたはの出力に表示されるように設定されます。/var/run/utmp
/var/log/wtmp
who
last
これらの権限を使用すると、実行xterm
時に実行するプロセスでその権限を表示できます。効果的なutmp
グループIDはグループのIDに変更されます(読むグループIDは変更されず、そのまま残ります。これにより、utmp
書き込みモードでレコードを開いてログインする権限が付与されます。wtmp
Linuxでは、セキュリティ対策として、root
実効ユーザーIDが実際のユーザーIDと異なる場合、または実効グループIDが実際のグループIDと異なるプロセス用に開かれたファイルのみをリストできます。 (これらのプロセスには他のプロセスと比較して権限があることがわかります/proc/<pid>fd
。)dr-x------ root root
dr-x------ you your-group
そのため、lsof
通常のユーザーとして実行すると、xterm
プロセスの開いたファイルを一覧表示できません。lsof
として実行する必要がありますroot
。
動作する理由については、gnome-terminals
いくつかの可能性があります。
gnome-terminal
ログイン履歴にエントリを追加しません(私のシステムの場合)。gnome-terminal
使用utempter
助ける人(この場合はsgidutmp
)ログイン履歴を追加します。これが私がシステムでxterm
やりたいことですkonsole
。gnome-terminal
utmp
ログイン履歴を更新した後(xterm
実行されていない)、有効なユーザーIDを実際のユーザーIDにリセットします(特別なアクセス権を一時的に放棄します)。
答え2
これは擬似端末マスター装置です。Linux。ただし、xterm は POSIX 機能を使用して擬似端末を開き、デバイスのオープンに関する詳細を隠します。
擬似端末は構成が異なりますが、システムでは以下を使用できます。この作品:
#elif defined(HAVE_POSIX_OPENPT) && defined(HAVE_PTSNAME) && defined(HAVE_GRANTPT_PTY_ISATTY)
if ((*pty = posix_openpt(O_RDWR)) >= 0) {
char *name = ptsname(*pty);
if (name != 0) {
strcpy(ttydev, name);
result = 0;
}
}
VTE(実際の端末エミュレータ: "gnome-terminal"はフロント)次のようなものを使って(参照src/pty.cc)。
実際には続ける必要はありません。使用基本デバイスのファイル記述子です。 xtermは2つのプロセスで実行されます使用このファイル記述子は「親」プロセスにあります。プライマリデバイスのファイル記述子を削除します。「子」プロセス(ソースを参照)。
xtermを実行すると、サブプロセスたとえば、次のように実行すると、シェルが会話することがあります。tty
どの端末を使用しているかを確認してください(例:奴隷擬似端末の片側所有者各プロセスは擬似端末の片側のみを使用する必要があるため、側は閉じています。
これ親プロセス(開く/dev/ptmx
)Xウィンドウ表示を管理します。
lsof
これらすべてを念頭に置いて、show xtermが開かれるのを見たいです/dev/ptmx
。とは別に:
- スクリーンショットのメッセージは、現在実行中ではないことを意味します。根、すべてのプロセスを表示できない権限の問題がある場合、
lsof
これは情報の損失の原因となる可能性があります。 - xtermは実際に実行されているシステムでは実行されていません。たとえば、そのシステムにsshでアクセスした場合(そして偶然に別のセッションで実行されているのを
lsof
見た場合)gnome-terminal