$ 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で実行されていることがわかります。