Linux에서 로그아웃해도 살아남는 프로세스는 무엇이며, 그렇지 않은 프로세스는 무엇입니까?

Linux에서 로그아웃해도 살아남는 프로세스는 무엇이며, 그렇지 않은 프로세스는 무엇입니까?

Linux(특히 Ubuntu)에서 로그아웃하면 어떤 일이 발생하는지 이해하려고 합니다.

  • 프로세스는 초기에 로그아웃을 수행하기 위해 로그아웃 프로세스에 어떻게 요청/알리나요(일부 신호 또는 다른 IPC 방식을 전송하여)? 로그아웃 프로세스에서는 어떤 프로그램이 실행됩니까? 요청/통지 프로세스는 일반적으로 어떤 프로그램을 실행합니까?

  • 프로세스를 로그오프하면 어떤 프로세스가 종료되고 어떤 프로세스가 종료되지 않습니까? (로그인 후 프로세스를 시작하고 로그아웃 후에도 유지되도록 하는 몇 가지 방법이 있는데 어떻게 합니까? 프로세스에 제어 터미널이 없도록 만드는 것도 한 가지 방법인 것 같지만 제어 터미널이 없는 아래의 예에서 로그아웃 시 대부분의 프로세스가 종료됩니다. )

  • 로그아웃 프로세스가 이러한 프로세스를 어떻게 종료할 수 있습니까(신호를 보내거나 다른 IPC 방식을 사용하여)?

가상 콘솔, 데스크톱 환경, SSH라는 세 가지 시나리오를 고려해보세요. (처음 두 개는 운영 체제에서 제공하고, 세 번째는 둘 다 사용자 공간에서 실행되지만 그렇지 않습니다.)

  1. 가상 콘솔에 로그인하면 로그인 셸에서 다음 상위 프로세스를 가져옵니다.

    1 systemd
    721 login
    26284 bash
    

    로그아웃 후에는 해당 프로세스 721 login와 그 아래의 프로세스가 사라집니다.

  2. 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와 그 아래의 프로세스가 사라집니다.

  3. 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-logindOS 로그아웃 프로세스에 systemd(특히 )가 어떻게 관여하는지 모르겠습니다 .

내 답변 중 일부는 다음과 같습니다.

  1. The loginwait()프로세스의 로그인 쉘 프로세스, 로그인 쉘이 종료되면 가 login수신되고 SIGCHLD깨어나서 실행을 다시 시작합니다. 즉, 종료됩니다.

  2. 것 같다로그아웃 요청자예를 들어lxsession-logout 프로세스 SIGTERM로 보내기lxsession (나는 소스 코드를 잘 이해하지 못하기 때문에 "~인 것 같다"고 말합니다.) 그 자손이 어떻게 lxsession반응했는지 SIGTERM, 왜 죽었는지 모르겠습니다 .구성을 찾을 수 없습니다. 우리 부모님 lightdm,27302도 왜 lxsession돌아가셨는지 모르겠어요 .깨어난 후 부모가 사망 lightdm,27302할 수도 있음 wait()lxsession.

  3. 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.

관련 정보