Tôi đang cố gắng để tắt / khởi động lại một cách duyên dáng trong ArchLinux với Gnome Shell. Bây giờ, khi tôi yêu cầu tắt máy, nó sẽ tắt ngay lập tức mà không cho chương trình mở thời gian để đóng / lưu các tệp đang mở một cách duyên dáng. Kết quả là, bất cứ khi nào tôi khởi động lại Chrome (ví dụ), nó sẽ cho tôi biết rằng phiên không được đóng đúng, v.v. Bằng cách đọc trên web tôi đã biết rằng systemd trong khi tắt các quy trình, trước tiên, nó sẽ gửi SIGTERM
theo sau SIGKILL
nếu quá trình không đóng hết thời gian chờ Tuy nhiên tôi nhận thấy rằng trên hệ thống của tôi SIGKILL
được gửi ngay sau đó SIGTERM
và tôi đoán đây là nguyên nhân của việc chấm dứt chương trình không duyên dáng.
Tôi đã tìm thấy một số tài liệu (nếu tôi đọc chính xác) nói rằng thời gian chờ trước khi gửi SIGKILL
có thể được đặt theo TimeoutStopSec=
tùy chọn. Ngoài ra gửi SIGKILL
cũng có thể bị vô hiệu hóa bởi SendSIGKILL=
tùy chọn. Nhưng tôi không thể tìm thấy nơi để định cấu hình các tùy chọn đó ... có tệp cấu hình tắt / khởi động lại hệ thống nơi tôi có thể đặt các tùy chọn đó không?
CHỈNH SỬA:
Tôi đã làm một số thử nghiệm và tôi phát hiện ra hai điều thú vị:
- Nếu tôi tự đóng chrome như thế này
killall -SIGTERM chrome
, nó sẽ không phàn nàn rằng nó đã không được đóng đúng vào lần tới khi tôi khởi động lại. Nếu tôi đóng nó như thế này thay vào đókillall -SIGKILL chrome
, nó sẽ phàn nàn. Điều này cho tôi biết rằng chrome đang xử lý SIGTERM chính xác. - Nhìn vào đầu ra của quy trình tắt máy của tôi, systemd in
Sending SIGTERM...
ngay lập tức theo sauSending SIGKILL...
Theo bình luận dưới đây, systemd chỉ xử lý các quy trình của nó. Vì vậy, trong trường hợp của tôi GDM. Điều này cho tôi biết rằng vấn đề có thể là:
- hoặc GDM không đóng chính xác các quy trình con của nó (ví dụ Chrome) (nghĩa là bằng cách gửi SIGTERM cho chúng)
- hoặc systemd đang gửi tin nhắn SIGKILL cho GDM sớm để không cho nó thời gian đóng chính xác các con của nó.
Có cách nào để kiểm tra / cấu hình cách GDM thực sự đóng con của nó không?
systemd's
kiểm soát - systemd
là pid 1
- nhưng Chrome thực hiện ra khỏi tập lệnh bao bọc của nó trong một lớp con và gọi các quy trình con sau đó. Tuy nhiên, nó sẽ làm những gì nó cần để tiêu diệt zygotes
miễn là hệ thống của bạn được cấu hình đúng. Bạn có đang sử dụng một trong những giải pháp không gian tạm thời cho chrome mà bạn sẽ thấy được đề xuất trong wiki wiki không?
gnome-session
.