"w"명령을 실행하면 두 명의 사용자가 로그인 한 것을 볼 수 있습니다 (모두). 여기에서 빠른 검색은 "한 명의 사용자가 한 번에 여러 개의 활성 세션을 가질 수 있기 때문에 이것이 정상임을 나타 냅니다."
세션이란 무엇입니까? 시스템에 한 번만 로그인했을 때 왜 두 가지가 있습니까?
"w"명령을 실행하면 두 명의 사용자가 로그인 한 것을 볼 수 있습니다 (모두). 여기에서 빠른 검색은 "한 명의 사용자가 한 번에 여러 개의 활성 세션을 가질 수 있기 때문에 이것이 정상임을 나타 냅니다."
세션이란 무엇입니까? 시스템에 한 번만 로그인했을 때 왜 두 가지가 있습니까?
답변:
Session
일반적으로 쉘 세션을 나타냅니다. 쉘은 컴퓨터와 상호 작용할 수 있습니다 것입니다. 사용자와 커널 사이의 브릿지 역할을합니다 . 명령을 실행할 때마다 의도를 포착하고 커널에게 명령을 수행하도록 지시하는 것은 쉘입니다.
대부분의 Linux 버전에서는 기본 셸이 bash
있으며 bash
새 터미널을 열 때마다 새 세션이 시작됩니다. w
게시 한 결과에 그래픽 로그인 세션이있는 것 같습니다 (기계를 쏘는 것처럼 보입니다).
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
두 번째 열은 tty를 보여줍니다. u는 pt가 xterm (가상 터미널)이고 다른 하나 (tty2)가 콘솔 로그인임을 알 수 있습니다.
1. 사용자가 단일 프로세스 (명령 줄 인터페이스 인 셸)에 로그인하더라도 다음과 같은 작업의 결과로 많은 프로세스를 실행하게됩니다.
-> 백그라운드에서 비 대화식 작업 실행
-> 작업 제어를 통한 대화식 작업 간 전환.
-> 파이프를 통해 함께 작동하는 여러 프로세스 시작.
-> 여러 터미널 창을 열 수있는 X 윈도우 시스템과 같은 윈도우 시스템을 실행합니다.
2. 이러한 모든 프로세스를 처리하기 위해 커널은 이러한 프로세스로 구성된 프로세스 그룹을 구성해야합니다.
3. 사용자에 따라이 프로세스 그룹을 추가로 관리하기 위해이 그룹은 사용자에 따라 세션으로 나뉩니다 (여기서 사용자는 Linux 사용자는 아니지만 쉘 또는 터미널은 사용자를 나타냄). 동일한 기계에 동일한 Linux 사용자가 로그인 한 두 개의 터미널 여기서는 2 개의 다른 사용자를 나타내며 여기서 2 개의 다른 사용자 세션을 나타냅니다 (단말기 만 터미널을 제어 할 수 있습니다).
해당 "사용자"또는 세션에 대해 셸을 실행하는 프로세스를 세션 리더라고합니다.
4. 또한 'x'버튼을 눌러 터미널을 닫지 마십시오. 그 터미널은 백그라운드에서 계속 실행됩니다. 터미널에서 세션을 초과하려면 CTRL + D를 눌러 종료하거나 종료해야합니다.
5. 터미널에서 로그 아웃 할 때 커널은 SIGHUP 신호 (kill -1과 유사)를 세션 리더 인 프로세스로 보냅니다. 이제 터미널에서 실행되는 다른 모든 프로세스는이 세션 리더의 자식입니다. 이러한 하위 프로세스는이 세션 리더 프로세스 (부모 프로세스)에 의해 제어되는 프로세스 그룹을 형성했습니다.
6. 세션 리더 프로세스는 각 하위 프로세스에 SIGHUP을 보내고 일부 프로세스는 종료되며 일부는 종료하지 않도록 선택할 수 있습니다 (일시 중단 또는 백그라운드에서 실행). 이들은 세션이 끝날 때 고아가되지 않도록 선택하고 init 프로세스 (Linux 시스템의 모든 프로세스의 부모)에 의해 즉시 채택됩니다.
자세한 내용은 링크 Linux 개발 프로세스 모델
세션은 사용자 프로세스에 의해 실행되는 각 터미널 쉘입니다. 예를 들어, 지금 3 개의 세션이 실행 중입니다. 내 Mate 데스크탑 환경과 두 개의 터미널 창.