ArchLinux에서 정상적으로 종료


21

그놈 쉘을 사용하여 ArchLinux에서 정상적으로 종료 / 재부팅하려고합니다. 이제 종료를 요청하면 열려있는 파일을 정상적으로 닫고 저장하는 데 열려있는 프로그램 시간을주지 않고 즉시 종료됩니다. 결과적으로 Chrome (예 :)을 다시 시작할 때마다 세션이 올바르게 닫히지 않았다는 메시지 SIGTERM가 나타 SIGKILL납니다. 주어진 시간 초과. 그러나 나는 내 시스템에서 SIGKILL즉시 전송 된 SIGTERM것을 알았으며 이것이 우아한 프로그램 종료의 원인이라고 생각합니다.

전송하기 전에 시간 초과 를 옵션 으로 설정할 수 있다는 내용의 문서 를 찾았 습니다 . 또한 옵션으로 전송을 비활성화 할 수도 있습니다 . 그러나 해당 옵션을 구성 할 위치를 찾을 수 없습니다 ... 해당 옵션을 설정할 수있는 시스템 종료 / 재부팅 구성 파일이 있습니까?SIGKILLTimeoutStopSec=SIGKILLSendSIGKILL=

편집하다:

나는 약간의 테스트를했고 두 가지 흥미로운 것을 발견했습니다.

  1. 이와 같이 크롬을 수동으로 닫으면 killall -SIGTERM chrome다음에 다시 시작할 때 올바르게 닫히지 않았다고 불평하지 않습니다. 대신 이와 같이 닫으면 killall -SIGKILL chrome불평합니다. 이것은 크롬이 SIGTERM을 올바르게 처리하고 있음을 알려줍니다.
  2. 종료 절차의 출력을 살펴보면 systemd prints Sending SIGTERM...다음에 즉시Sending SIGKILL...

아래 의견에 따르면 systemd는 프로세스 만 처리합니다. 제 경우에는 GDM입니다. 이것은 문제가 다음과 같을 수 있음을 나타냅니다.

  1. GDM이 하위 프로세스 (예 : Chrome)를 올바르게 닫지 않는 경우 (예 : SIGTERM을 전송하여)
  2. 또는 systemd가 GDM에 SIGKILL 메시지를 보내 자식을 올바르게 닫을 시간을주지 않습니다.

실제로 GDM이 자식을 닫는 방법을 확인 / 구성 할 수있는 방법이 있습니까?


1
체계적으로 통제 된 프로세스 만 신호 처리합니다. 크롬과 같은 것은 그러한 과정 중 하나가 아닙니다. Systemd는 디스플레이 관리자 (xdm, gdm, kdm 등)에게 신호를 보내고, 그다음 자식에게 신호를 보내는 것은 디스플레이 관리자에게 달려 있습니다. 크롬 신호가 없으면 xorg 서버가 종료되고 디스플레이가 사라지면 죽습니다.
Patrick

@ 패트릭 : 고마워요. 그래서 '/etc/systemd/system/display-manager.service'의 '[Service]'섹션에 'TimeoutStopSec = 90s'를 추가하려고 시도한 이유는 다음과 같습니다. freedesktop.org/software/systemd/man/systemd.service. html 그러나 아무것도 변하지 않는다 ... :(
lviggiani

크롬 해야 하에 systemd's관리 - systemdpid 1- 그러나 이후 서브 쉘 및 원용하는 자식 프로세스에서의 래퍼 스크립트 중 크롬 임원. 그래도 zygotes시스템이 올바르게 구성되어 있으면 시스템 을 종료하는 데 필요한 작업을 수행 합니다. 아치 위키에서 권장하는 크롬 용 임시 공간 솔루션 중 하나를 사용하고 있습니까?
mikeserv

1
아치의 KDE 및 Firefox와 비슷한 문제가 발생합니다. 나는 왜 그런지 알아 내려고 노력한 적이 없다.
StrongBad

2
GDM은 신호 프로세스가 아닙니다. GDM은 기본적으로 Xorg와 PAM을 연결하는 바보 같은 방법입니다. 진짜 범인은 gnome-session입니다.
strugee

답변:


2

데스크톱을 정상적으로 종료하려면 TimeoutStopSec=GDM 또는 다른 디스플레이 관리자 를 높이십시오 .


모든 클라이언트를 닫을 수 있는지 알 수없는 경우 GDM이 systemd에게 처음부터 종료하도록 지시해서는 안됩니다.
enigmaticPhysicist 10

2

이것은 Gnome 3.12가있는 아치 리눅스에서 나를 위해 일했습니다. 의 설정과 관련이있는 것으로 나타났습니다 /etc/gdm/PostSession/Default.

  1. sudo pacman -S wmctrlWindows 관리를 위해 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
    

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


Plasma 5의 경우이 스크립트를 .config / plasma-workspace / shutdown /에 배치하면 문제가 해결됩니다.
AF7

-1

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'을 실행해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.