「w」コマンドを実行すると、2人のユーザーがログインしているのがわかります(どちらも私です)。ここで簡単に検索すると、「1人のユーザーが同時に複数のアクティブセッションを持つことができる」ため、これは正常であることがわかります。
セッションとは?システムに1回だけログインしたのに、なぜ2つあるのですか?
「w」コマンドを実行すると、2人のユーザーがログインしているのがわかります(どちらも私です)。ここで簡単に検索すると、「1人のユーザーが同時に複数のアクティブセッションを持つことができる」ため、これは正常であることがわかります。
セッションとは?システムに1回だけログインしたのに、なぜ2つあるのですか?
回答:
Session
通常、シェルセッションを指します。シェルは、あなたがコンピュータと対話することを可能にするものです。これは、ユーザーとカーネルの間のブリッジとして機能します。コマンドを実行するときはいつでも、意図を取得してカーネルにその動作を実行するように指示するのはシェルです。
ほとんどのLinuxフレーバーでは、デフォルトのシェルはでbash
ありbash
、新しいターミナルを開くたびに新しいセッションが起動されます。w
あなたが投稿した出力では、グラフィカルログインセッションを持っているようです(あなたはマシンをsshしているように見えます):
argento :0 18set13 ?xdm? 2days 1.58s gdm-session-worker [pam/gdm-password]
いくつかのオープンターミナルエミュレータ:
argento pts/0 18set13 29:26m 5:26 5:26 rdesktop -g 1200x700 -u administrator -p XXXXXXXXX -d DOMAIN -K srv-wsus
argento pts/1 18set13 9days 0.16s 0.16s /bin/bash
argento pts/2 lun10 5.00s 0.09s 7.55s /usr/bin/python /usr/bin/terminator
argento pts/3 14:40 33:41 0.09s 0.03s vim notes.txt
argento pts/4 gio12 26:04m 0.10s 7.55s /usr/bin/python /usr/bin/terminator
argento pts/5 14:56 17:33 0.11s 0.11s /bin/bash
また、非グラフィカルttyからログインしたようです。
argento tty2 15:11 1:01 0.09s 0.09s -bash
これらはそれぞれシェルの個別のインスタンスであり、それぞれ独自のセッションとしてカウントされます。
すべてのターミナルセッションはユーザーセッションだと思います。Xの下に複数の端末を置くことができ、それらは仮想端末です。または、uはコンソールの下に実際の端末を置くことができます。これらはすべてセッションです。これは私の「w」です
$ w
15:14:13 up 9 days, 6:02, 8 users, load average: 1,03, 1,19, 1,31
USER TTY LOGIN@ IDLE JCPU PCPU WHAT
argento :0 18set13 ?xdm? 2days 1.58s gdm-session-worker [pam/gdm-password]
argento pts/0 18set13 29:26m 5:26 5:26 rdesktop -g 1200x700 -u administrator -p XXXXXXXXX -d DOMAIN -K srv-wsus
argento pts/1 18set13 9days 0.16s 0.16s /bin/bash
argento pts/2 lun10 5.00s 0.09s 7.55s /usr/bin/python /usr/bin/terminator
argento pts/3 14:40 33:41 0.09s 0.03s vim notes.txt
argento pts/4 gio12 26:04m 0.10s 7.55s /usr/bin/python /usr/bin/terminator
argento pts/5 14:56 17:33 0.11s 0.11s /bin/bash
argento tty2 15:11 1:01 0.09s 0.09s -bash
2番目の列はttyを示しています。ptsはxterm(仮想端末)であり、もう1つ(tty2)はコンソールログインです。
1.ユーザーは単一のプロセス(コマンドラインインターフェイスであるシェル)にログインしますが、ユーザーは次のようなアクションの結果として多くのプロセスを実行することになります。
->バックグラウンドで非インタラクティブタスクを実行しています。
->ジョブ制御を介したインタラクティブタスク間の切り替え。
->パイプを介して連携する複数のプロセスを開始します。
->複数のターミナルウィンドウを開くことができるXウィンドウシステムなどのウィンドウシステムの実行。
2.これらすべてのプロセスを処理するために、カーネルはこれらのプロセスで構成されるプロセスグループを形成する必要があります。
3.これらのプロセスグループをさらにユーザー別に管理するために、これらのグループはユーザーごとにセッションに分割されます(ここでのユーザーはLinuxユーザーではなく、シェルまたはターミナルはユーザーを表しています。ここでは、2つの異なるユーザー、つまりここでは2つの異なるユーザーセッションを表しています。
その「ユーザー」またはセッションのシェルを実行しているプロセスは、セッションリーダーと呼ばれます。
4.また、「x」ボタンを押してターミナルを閉じても、そのターミナルから出られないことに注意してください。その端末はバックグラウンドで実行し続けます。端末からセッションをオーバーしたい場合は、CTRL + Dを押してログアウトするか、終了する必要があります。
5.端末からログアウトすると、カーネルはセッションリーダーであるプロセスにSIGHUPシグナル(kill -1と同様)を送信します。現在、ターミナルで実行されている他のすべてのプロセスは、このセッションリーダーの子です。これらの子プロセスは、このセッションリーダープロセス(親プロセス)によって制御されるプロセスグループを形成していました。
6.セッションリーダープロセスは各子プロセスにSIGHUPを送信します。一部のプロセスは終了しますが、終了しないことを選択できるものもあります(サスペンドまたはバックグラウンドで実行中)。終了しないことを選択したユーザーは、セッションが終了すると孤立し、すぐにinitプロセス(Linuxマシンのすべてのプロセスの親)に採用されます。
詳細については、リンクを参照してくださいLinux開発のプロセスモデル
セッションは、ユーザーのプロセスによって実行される各ターミナルシェルです。たとえば、現在3つのセッションを実行しています。私のMateデスクトップ環境と2つのターミナルウィンドウ。