ArchLinux에서 정상적인 종료/재시작을 수행하기 위해 GNOME Shell을 사용하려고 합니다. 이제 닫기를 요청하면 열려 있는 파일을 적절하게 닫거나 저장할 수 있는 열린 프로그램 시간을 제공하지 않고 즉시 닫힙니다. 따라서 예를 들어 Chrome을 다시 시작할 때마다 세션이 제대로 닫히지 않았다는 등의 메시지가 나타납니다. 온라인에서 읽은 내용에 따르면 systemd가 프로세스를 종료할 때 먼저 프로세스를 보낸 다음 SIGTERM
지정된 SIGKILL
시간 초과 내에 프로세스가 종료되지 않으면 프로세스가 종료된다는 것을 이해합니다. 하지만 내 시스템에서는 그 내용이 SIGKILL
바로 전송된 것을 확인했는데 SIGTERM
, 이것이 바로 프로그램이 비정상적으로 종료된 이유인 것 같습니다.
내가 좀 찾았어문서(올바르게 읽었다면) 보내기 전 시간 제한은 SIGKILL
options 를 통해 설정할 수 있다고 나와 있습니다 TimeoutStopSec=
. SIGKILL
옵션을 통해 전송을 비활성화할 수도 있습니다 SendSIGKILL=
. 하지만 이러한 옵션을 구성할 위치를 찾을 수 없습니다. 이러한 옵션을 설정할 수 있는 시스템 종료/다시 시작 구성 파일이 있습니까?
편집하다:
몇 가지 테스트를 수행한 결과 두 가지 흥미로운 점을 발견했습니다.
- 이렇게 수동으로 크롬을 닫으면
killall -SIGTERM chrome
다음에 다시 시작할 때 제대로 닫히지 않는다고 불평하지 않습니다. 이렇게 닫으면killall -SIGKILL chrome
불평이 나옵니다. 이는 크롬이 SIGTERM을 올바르게 처리하고 있음을 알려줍니다. - 종료 프로세스의 출력을 보면 systemd가
Sending SIGTERM...
즉시 인쇄한 다음Sending SIGKILL...
아래 설명에 따르면 systemd는 프로세스만 처리합니다. 내가 아는 한 GDM입니다. 이는 문제가 다음과 같을 수 있음을 알려줍니다.
- GDM이 하위 프로세스(예: Chrome)를 제대로 종료하지 않습니다(예: SIGTERM 전송).
- 또는 systemd는 자식을 제대로 종료할 충분한 시간을 주지 않고 GDM에 SIGKILL 메시지를 보냅니다.
GDM이 실제로 하위 항목을 닫는 방법을 확인/구성하는 방법이 있습니까?
답변1
데스크탑을 정상적으로 종료하려면 TimeoutStopSec=
GDM이나 사용 중인 다른 디스플레이 관리자를 키워야 할 수도 있습니다.
답변2
이것은 Arch Linux와 Gnome 3.12에서 나에게 효과적입니다. 나중에 나는 이것이 내부 구성과 관련이 있을 수 있다는 것을 알게 되었습니다 /etc/gdm/PostSession/Default
.
sudo pacman -S wmctrl
Windows 관리를 위해 setup wmctrl을 실행합니다 .모든 창을 닫는 실행 파일을 만듭니다. 예를 들어
/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
/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 스크립트를 호출합니다.
- http://www.linuxquestions.org/questions/linux-desktop-74/gnome-run-script-on-logout-724453/#post3560301
- 관리자 권한이 없으면 그놈 로그아웃 중에 스크립트를 어떻게 실행합니까?
이 스크립트 조합은 CentOS 7 데스크톱 컴퓨터를 로그아웃하거나 종료할 때 Firefox, Chrome 등을 자동으로 완전히 종료하는 데 적합합니다. CentOS 7에서 이 Python 스크립트가 제대로 작동하려면 "yum install gnome-python2-gnome"을 실행해야 합니다.