ArchLinux의 정상적인 종료

ArchLinux의 정상적인 종료

ArchLinux에서 정상적인 종료/재시작을 수행하기 위해 GNOME Shell을 사용하려고 합니다. 이제 닫기를 요청하면 열려 있는 파일을 적절하게 닫거나 저장할 수 있는 열린 프로그램 시간을 제공하지 않고 즉시 닫힙니다. 따라서 예를 들어 Chrome을 다시 시작할 때마다 세션이 제대로 닫히지 않았다는 등의 메시지가 나타납니다. 온라인에서 읽은 내용에 따르면 systemd가 프로세스를 종료할 때 먼저 프로세스를 보낸 다음 SIGTERM지정된 SIGKILL시간 초과 내에 프로세스가 종료되지 않으면 프로세스가 종료된다는 것을 이해합니다. 하지만 내 시스템에서는 그 내용이 SIGKILL바로 전송된 것을 확인했는데 SIGTERM, 이것이 바로 프로그램이 비정상적으로 종료된 이유인 것 같습니다.

내가 좀 찾았어문서(올바르게 읽었다면) 보내기 전 시간 제한은 SIGKILLoptions 를 통해 설정할 수 있다고 나와 있습니다 TimeoutStopSec=. SIGKILL옵션을 통해 전송을 비활성화할 수도 있습니다 SendSIGKILL=. 하지만 이러한 옵션을 구성할 위치를 찾을 수 없습니다. 이러한 옵션을 설정할 수 있는 시스템 종료/다시 시작 구성 파일이 있습니까?

편집하다:

몇 가지 테스트를 수행한 결과 두 가지 흥미로운 점을 발견했습니다.

  1. 이렇게 수동으로 크롬을 닫으면 killall -SIGTERM chrome다음에 다시 시작할 때 제대로 닫히지 않는다고 불평하지 않습니다. 이렇게 닫으면 killall -SIGKILL chrome불평이 나옵니다. 이는 크롬이 SIGTERM을 올바르게 처리하고 있음을 알려줍니다.
  2. 종료 프로세스의 출력을 보면 systemd가 Sending SIGTERM...즉시 인쇄한 다음Sending SIGKILL...

아래 설명에 따르면 systemd는 프로세스만 처리합니다. 내가 아는 한 GDM입니다. 이는 문제가 다음과 같을 수 있음을 알려줍니다.

  1. GDM이 하위 프로세스(예: Chrome)를 제대로 종료하지 않습니다(예: SIGTERM 전송).
  2. 또는 systemd는 자식을 제대로 종료할 충분한 시간을 주지 않고 GDM에 SIGKILL 메시지를 보냅니다.

GDM이 실제로 하위 항목을 닫는 방법을 확인/구성하는 방법이 있습니까?

답변1

데스크탑을 정상적으로 종료하려면 TimeoutStopSec=GDM이나 사용 중인 다른 디스플레이 관리자를 키워야 할 수도 있습니다.

답변2

이것은 Arch Linux와 Gnome 3.12에서 나에게 효과적입니다. 나중에 나는 이것이 내부 구성과 관련이 있을 수 있다는 것을 알게 되었습니다 /etc/gdm/PostSession/Default.

  1. sudo pacman -S wmctrlWindows 관리를 위해 setup wmctrl을 실행합니다 .

  2. 모든 창을 닫는 실행 파일을 만듭니다. 예를 들어 /home/[your_username]/bin/close-all-windows다음과 같이 넣었습니다 .

    #!/bin/sh
    wmctrl -l | while read -r line
    do
        wmctrl -c `echo "$line" | sed 's/.*  [0-9]* [your_hostname] //'`
    done
    
  3. /etc/gdm/PostSession/Default다음 이전 콘텐츠를 수정 하고 추가하세요 exit 0.

    echo " Closing selected windows programs gracefully"
    export DISPLAY=:0
    su [your_username] -c /home/[your_username]/bin/close-all-windows
    

이것이 효과가 있기를 바랍니다.

답변3

Sorpass의 wmctrl 스크립트는 제게는 잘 작동합니다(CentOS 7에서는 먼저 'yum install wmctrl'을 실행하면 됩니다). 하지만 /etc/gdm/PostSession/Default는 종료 시가 아니라 로그아웃 시에만 실행되는 것 같습니다. 따라서 /etc/gdm/PostSession/Default를 사용하는 대신 이제 다음 두 사이트에서 찾을 수 있는 Seamus Phelan의 Python 스크립트에서 sorpass의 wmctrl 스크립트를 호출합니다.

이 스크립트 조합은 CentOS 7 데스크톱 컴퓨터를 로그아웃하거나 종료할 때 Firefox, Chrome 등을 자동으로 완전히 종료하는 데 적합합니다. CentOS 7에서 이 Python 스크립트가 제대로 작동하려면 "yum install gnome-python2-gnome"을 실행해야 합니다.

관련 정보