Linux(특히 Ubuntu)에서 로그아웃하면 어떤 일이 발생하는지 이해하려고 합니다.
프로세스는 초기에 로그아웃을 수행하기 위해 로그아웃 프로세스에 어떻게 요청/알리나요(일부 신호 또는 다른 IPC 방식을 전송하여)? 로그아웃 프로세스에서는 어떤 프로그램이 실행됩니까? 요청/통지 프로세스는 일반적으로 어떤 프로그램을 실행합니까?
프로세스를 로그오프하면 어떤 프로세스가 종료되고 어떤 프로세스가 종료되지 않습니까? (로그인 후 프로세스를 시작하고 로그아웃 후에도 유지되도록 하는 몇 가지 방법이 있는데 어떻게 합니까? 프로세스에 제어 터미널이 없도록 만드는 것도 한 가지 방법인 것 같지만 제어 터미널이 없는 아래의 예에서 로그아웃 시 대부분의 프로세스가 종료됩니다. )
로그아웃 프로세스가 이러한 프로세스를 어떻게 종료할 수 있습니까(신호를 보내거나 다른 IPC 방식을 사용하여)?
가상 콘솔, 데스크톱 환경, SSH라는 세 가지 시나리오를 고려해보세요. (처음 두 개는 운영 체제에서 제공하고, 세 번째는 둘 다 사용자 공간에서 실행되지만 그렇지 않습니다.)
가상 콘솔에 로그인하면 로그인 셸에서 다음 상위 프로세스를 가져옵니다.
1 systemd 721 login 26284 bash
로그아웃 후에는 해당 프로세스
721 login
와 그 아래의 프로세스가 사라집니다.Lubuntu 18.04에서 lightdm 및 LXDE에 로그인하고 데스크탑 패널에서 lxterminal을 실행하고 lxterminal 창에서 다음 명령을 사용하여 상위 프로세스를 가져옵니다.
$ ps -paus $$ systemd,1 --system --deserialize 19 `-lightdm,661 `-lightdm,27302 --session-child 13 24 `-lxsession,27309,testme -s Lubuntu -e LXDE `-lxpanel,27399 --profile Lubuntu `-lxterminal,27565 `-bash,27568 `-pstree,27594 -paus 27568
로그아웃하면 해당 프로세스
lightdm,27302
와 그 아래의 프로세스가 사라집니다.Lubuntu 18.04에 SSH를 연결한 후:
$ pstree -a -p -s $$ systemd,1 --system --deserialize 19 └─sshd,669 -D └─sshd,22838 └─sshd,22979 └─bash,22980 └─pstree,30610 -a -p -s 22980
로그아웃하면
sshd,22838
아래부터 시작하는 모든 프로세스가 사라집니다.
감사해요.
답변1
/usr/lib/systemd/systemd-logind
OS 로그아웃 프로세스에 systemd(특히 )가 어떻게 관여하는지 모르겠습니다 .
내 답변 중 일부는 다음과 같습니다.
The login
wait()
프로세스의 로그인 쉘 프로세스, 로그인 쉘이 종료되면 가login
수신되고SIGCHLD
깨어나서 실행을 다시 시작합니다. 즉, 종료됩니다.것 같다로그아웃 요청자예를 들어
lxsession-logout
프로세스SIGTERM
로 보내기lxsession
(나는 소스 코드를 잘 이해하지 못하기 때문에 "~인 것 같다"고 말합니다.) 그 자손이 어떻게lxsession
반응했는지SIGTERM
, 왜 죽었는지 모르겠습니다 .구성을 찾을 수 없습니다. 우리 부모님lightdm,27302
도 왜lxsession
돌아가셨는지 모르겠어요 .깨어난 후 부모가 사망lightdm,27302
할 수도 있음wait()
lxsession
.SSH를 종료한 후 무슨 일이 일어나는지 모르겠습니다. 내 생각엔 CLI 로그인(사례 1)과 비슷할 것 같은데, 기다리다 죽을
sshd,22979
수도 있습니다 .bash,22980
그런데 왜 이렇게 프로세스가 많은지 모르겠습니다sshd
.
답변2
기억하세요. 제가 모든 세부 사항을 말해 주더라도 여러분은 이해하지 못할 것이기 때문입니다. 나는 또한 당신이 모든 개념에 익숙하지 않다는 것을 알고 있지만 맨페이지를 읽는 것이 도움이 될 것입니다.
프로세스는 초기에 로그아웃을 수행하기 위해 로그아웃 프로세스에 어떻게 요청/알리나요(일부 신호 또는 다른 IPC 방식을 전송하여)? 로그아웃 프로세스에서는 어떤 프로그램이 실행됩니까? 요청/통지 프로세스는 일반적으로 어떤 프로그램을 실행합니까?
"로그아웃 프로세스"가 "세션 관리자"를 의미한다고 가정합니다. .logind
/usr/lib/systemd/systemd-logind
IPC가 가능한 모든 프로그램 logind
.
프로세스를 로그오프하면 어떤 프로세스가 종료되고 어떤 프로세스가 종료되지 않습니까? (로그인 후 프로세스를 시작하고 로그아웃 후에도 유지되도록 하는 몇 가지 방법이 있는데 어떻게 합니까? 프로세스에 제어 터미널이 없도록 만드는 것도 한 가지 방법인 것 같지만 제어 터미널이 없는 아래의 예에서 로그아웃 시 대부분의 프로세스가 종료됩니다. )
해당 세션 내의 프로세스가 종료되고, 이것이 사용자의 마지막 세션이고 사용자가 연기를 활성화하지 않은 경우 전체 사용자 조각이 삭제됩니다. 죽이지 않음으로써. logind
이 커널 기능은 사용되지 않기 때문에 터미널 제어와는 거의 관련이 없습니다 .
로그아웃 프로세스가 이러한 프로세스를 어떻게 종료할 수 있습니까(신호를 보내거나 다른 IPC 방식을 사용하여)?
단위 파일 및 신호에 사전 정의된 작업을 포함하는 복잡한 논리.
1,2,3 프로세스 트리 보기가 작동하지 않습니다. logind
이것에 대해 신경 쓰지 마십시오. 기본적으로 시스템 스타일 서비스와 세션 관리는 cgroup입니다. 바라보다 systemctl status
.