Xアプリケーションがpsの結果にTTYとして疑問符を表示するのはなぜですか?

Xアプリケーションがpsの結果にTTYとして疑問符を表示するのはなぜですか?
$ ps -ef | head -n 1 && ps -ef | grep calc
UID          PID    PPID  C STIME TTY          TIME CMD
user1     524014    5382  0 10:21 ?        00:00:01 gnome-calculator
user1     532125  510665  0 10:36 pts/4    00:00:00 grep calc

私はデーモンだけにTTYがあると思いましたが、?Gnome Calculatorはデーモンではないようです。私はGnomeセッションで使用されるTTYであるTTY2で実行されていることを知っています。それでは、TTY列にps結果が表示されるのはなぜですか??

[編集する]

Gnome Calculatorはグラフィカルシェル(Gnome Shell)を介して実行されるため、TTYに直接接続されていないようです。プロセスツリーを見ると、TTY2にプロセスがリンクされると思いましたが、そうではありません。

$ ps -f | head -n 1 && ps -ef | grep calc
UID          PID    PPID  C STIME TTY          TIME CMD
user1     524014    5382  0 10:21 ?        00:00:01 gnome-calculator
user1     578611  552619  0 11:58 pts/5    00:00:00 grep calc

$ ps -f -p 5382
UID          PID    PPID  C STIME TTY          TIME CMD
user1       5382    5131  4 juin10 ?       00:42:26 /usr/bin/gnome-shell

$ ps -f -p 5131
UID          PID    PPID  C STIME TTY          TIME CMD
user1       5131       1  0 juin10 ?       00:00:00 /lib/systemd/systemd --user

$ echo $DISPLAY 
:1

チェーンのTTY2に接続されたプロセスはありません。しかし、明らかにGnome電卓は現在TTY2に表示されています。特定のプロセスが現在どのTTYに表示されるかを調べるコマンドはありますか? (あるいはどちらから$DISPLAY)?

答え1

ps は、tty にすぐに接続されていないスレッドの疑問符を表示します。 (プロセスを制御できる端末)

これは確かにカーネルスレッドや他のデーモンの場合です。

ただし、これはXクライアントの場合でも必須です。

標準ttyから直接gnome-calculatorを起動しましたか?当然じゃない! ttyを見つけて、その下にCtrl-Cと入力して終了できますか?再び動作しません!
もちろん、グラフィカルインターフェイス、つまり論理的にいくつかのXクライアントから起動します。 => ttyが添付されていません。

しかし、startxを使用してttyからXサーバーを起動すると、Xサーバー自体が実際にttyに接続されていることがわかります。


以下のコメントを修正しました。

申し上げることはできませんが、私の場合は以下を見てください。

1 S acoswt    1817     1  0  80   0 -  1036 -      07:02 tty4     00:00:00 dbus-launch --exit-with-session startplasma-x11

私のデスクトップ環境(KDE-Plasma)は次のように始まります...dbus...デーモン。私はあなたがGNOMEでも同様のものを得ていると思います。繰り返しますが…制御端末はありません。

答え2

この質問には2つの部分があります。

まず、psが「?」を表示する理由は非常に簡単です。 procpsライブラリはプロセスステータスファイルのフィールド7を表示し、それをTTY名で解決しようとします。

$ ps -o pid,tty,cmd -C gnome-calculator
    PID TT       CMD
  74426 ?        gnome-calculator
$ cut -f 1-9 -d' ' /proc/74426/stat
74426 (gnome-calculato) S 2325 2325 2325 0 -1 4194304

2325の後に0と-1が表示されるのを見ましたか?カーネルがデフォルトで「不明」または「該当なし」を意味するTTYデバイスID。

gnome-terminalを使用してコマンドラインから起動すると、コントロール端末があるのでTTYを取得します。

$ ps -o pid,tty,cmd -C gnome-calculator
    PID TT       CMD
  75446 pts/2    gnome-calculator
$ cut -f 1-9 -d' ' /proc/75446/stat
75446 (gnome-calculato) S 72016 75446 72016 34818 75721 4194304

34818はデバイスIDです。奇妙なビットマスキングと移動Primary ID は 136、Secondary ID は 2、つまり /dev/pts/2 の ID になることがわかります。

第二に、最初の計算機にTTYデバイスIDがない理由は、Xがどのように機能するかということです。モニターがあるコンピューターと電卓プログラムを実行しているコンピューターが異なる可能性があるためです。

したがって、XサーバーがTTY2で実行されている場合、電卓プログラムはそのTTYでは実行されません。セッションプロセス(おそらくgnome-session)を見ると、そのプロセスがtty2で実行されていることがわかります。

関連情報