그놈을 종료할 때 프로세스가 종료되는 것을 방지하는 방법은 무엇입니까?

그놈을 종료할 때 프로세스가 종료되는 것을 방지하는 방법은 무엇입니까?

이제 SSH를 통해 실행하는 데 익숙해졌으며 tmux연결을 끊더라도 tmux다시 연결하면 세션이 계속 실행됩니다.

그래서 나는 한 명의 사용자로 tmux 세션을 시작한 다음(GNOME의 터미널 애플리케이션 사용) 그놈에서 로그아웃하고 다시 연결(예를 들어 SSH를 통해)함으로써 동일한 작업을 수행할 수 있다고 가정했습니다. 내가 틀렸다는 것이 밝혀졌습니다.

흥미롭게도 해결 방법으로 다음을 수행하면 작동하는 것 같습니다.

  1. ssh $(whoami)@localhost
  2. tmux대화 시작
  3. 연결을 끊다
  4. 그놈에서 로그아웃
  5. 다른 사용자로 다시 로그인
  6. SSH를 사용하여 1단계의 사용자에 연결
  7. tmux세션 에 다시 연결

아아, 그놈이 로그아웃 시 해당 사용자의 모든 프로세스를 종료하는 것 같은 이유를 이해할 수 없습니다.

위의 해결 방법보다 더 좋은 방법이 있습니까? 아마도 Bash 내장 함수의 GNOMEish 버전일 수도 있습니다. fg// bg?disown

답변1

동시에 나는 이에 대해 추가 연구를 수행했습니다. Nicholas의 시스템 포인터는 매우 정확합니다. 이 문제를 완화하는 방법에는 여러 가지가 있는 것 같습니다.

1.logind.conf

/etc/systemd/logind.conf및 친구에는 세 가지 관련 설정이 포함되어 있습니다.

  • KillUserProcesses=( yes로그아웃하면systemd-logind.service(8)세션이 종료되었습니다.
  • KillOnlyUsers=adam eve joe jane위 설정의 적용을 제한하도록 허용할 사용자 목록(예: 공백으로 구분된 목록 )입니다.
  • KillExcludeUsers=이전 설정과 달리 의 영향으로부터 사용자를 보호합니다 KillUserProcesses=yes.

따라서 사용자를 설정하거나 포함하거나 KillUserProcesses=no(GNOME을 사용하는 경우) 로그인 세션이 종료될 때 프로세스 종료가 발생하지 않도록 사용자를 나열할 수 있습니다.gdmKillOnlyUsersKillExcludeUsers

를 통해 세션을 볼 수 있습니다 loginctl list-sessions.

2.loginctl enable-linger username

다음 명령을 실행하여 현재 세션에 대한 지연을 활성화할 수 있습니다.loginctl(1)세션 범위에서는 다음과 같습니다(분명히 username실제 사용자 이름 또는 으로 대체됨 $(whoami)).

loginctl enable-linger username

단서는 다음에서 찾을 수 있습니다.logind.conf(5)매뉴얼 페이지:

세션 프로세스 외에도 사용자 프로세스도 사용자 관리자 단위에서 실행될 수 있습니다 [email protected]. 지연 설정에 따라 사용자는 로그인 세션과 독립적으로 프로세스를 실행할 수 있습니다. enable-linger설명을 참조하세요 .loginctl(1).

삼.systemd-run --scope --user command

본 매뉴얼은logind.conf(5)다음을 포함하는 단서:

. 및 .와 같은 도구 를 세션 범위 밖으로 이동하지 않으면 설정이 KillUserProcesses=yes중단됩니다 . 예시 보기screen(1)tmux(1)systemd-run(1).

사실 설명서를 읽고 있어요.systemd-run(1)우리는 다음과 같은 예를 찾습니다:

예시 5. 사용자 서비스로서의 시작 화면

$ systemd-run --scope --user screen Running scope as unit
run-r14b0047ab6df45bfb45e7786cc839e76.scope.

$ screen -ls There is a screen on:
        492..laptop     (Detached) 1 Socket in /var/run/screen/S-fatima.

그러면 에 의해 시작된 프로세스의 하위로 범위 단위의 프로세스가 screen시작 됩니다. 단말기에서 분리하면 종료되고 서비스 단위가 종료되므로 단위 대신 단위를 사용하십시오. 화면을 사용자 구성 요소로 실행하면 세션 범위가 지정되지 않는다는 장점이 있습니다. 기본적으로 구성된 경우 사용자가 세션에서 로그아웃하면 세션 범위가 종료됩니다.systemd --user[email protected]systemd.scope(5)systemd.service(5)screenKillUserProcesses=yeslogind.conf(5)


시험용

systemd 245 (245.4-4ubuntu3.2)
+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=hybrid

답변2

이것은 systemd와 관련이 있을 수 있습니다. 어떤 시점에서 나는 로그아웃 시 모든 데몬을 죽였다고 들었습니다(수십 년 간의 이전 Unix 관행을 무시합니다!). 그러나 한동안 그것에 대해 듣지 못했기 때문에 그들이 그것을 다시 변경한 것 같습니다. 쉽게 해결되는 문제이거나 사용자가 볼 수 없도록 패키저가 작업 중입니다.

어쨌든 시스템화되어 있다면 다음과 같은 다른 답변을 찾아 시도해 보시겠습니까?여기.

관련 정보