Linuxの「セッション」の定義は何ですか?


12

「w」コマンドを実行すると、2人のユーザーがログインしているのがわかります(どちらも私です)。ここで簡単に検索すると、「1人のユーザーが同時に複数のアクティブセッションを持つことができる」ため、これは正常であることがわかります。

セッションとは?システムに1回だけログインしたのに、なぜ2つあるのですか?

回答:


9

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

これらはそれぞれシェルの個別のインスタンスであり、それぞれ独自のセッションとしてカウントされます。


2

すべてのターミナルセッションはユーザーセッションだと思います。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)はコンソールログインです。


2

1.ユーザーは単一のプロセス(コマンドラインインターフェイスであるシェル)にログインしますが、ユーザーは次のようなアクションの結果として多くのプロセスを実行することになります。

->バックグラウンドで非インタラクティブタスクを実行しています。
->ジョブ制御を介したインタラクティブタスク間の切り替え。
->パイプを介して連携する複数のプロセスを開始します。
->複数のターミナルウィンドウを開くことができるXウィンドウシステムなどのウィンドウシステムの実行。

2.これらすべてのプロセスを処理するために、カーネルはこれらのプロセスで構成されるプロセスグループを形成する必要があります。

3.これらのプロセスグループをさらにユーザー別に管理するために、これらのグループはユーザーごとにセッションに分割されます(ここでのユーザーはLinuxユーザーではなく、シェルまたはターミナルはユーザーを表しています。ここでは、2つの異なるユーザー、つまりここでは2つの異なるユーザーセッションを表しています。
その「ユーザー」またはセッションのシェルを実行しているプロセスは、セッションリーダーと呼ばれます。

4.また、「x」ボタンを押してターミナルを閉じても、そのターミナルから出られないことに注意してください。その端末はバックグラウンドで実行し続けます。端末からセッションをオーバーしたい場合は、CTRL + Dを押してログアウトするか、終了する必要があります。

5.端末からログアウトすると、カーネルはセッションリーダーであるプロセスにSIGHUPシグナル(kill -1と同様)を送信します。現在、ターミナルで実行されている他のすべてのプロセスは、このセッションリーダーの子です。これらの子プロセスは、このセッションリーダープロセス(親プロセス)によって制御されるプロセスグループを形成していました。

6.セッションリーダープロセスは各子プロセスにSIGHUPを送信します。一部のプロセスは終了しますが、終了しないことを選択できるものもあります(サスペンドまたはバックグラウンドで実行中)。終了しないことを選択したユーザーは、セッションが終了すると孤立し、すぐにinitプロセス(Linuxマシンのすべてのプロセスの親)に採用されます。


詳細については、リンクを参照してくださいLinux開発のプロセスモデル


1

セッションは、ユーザーのプロセスによって実行される各ターミナルシェルです。たとえば、現在3つのセッションを実行しています。私のMateデスクトップ環境と2つのターミナルウィンドウ。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.