ฉันกำลังพยายามที่จะปิด / รีบูตที่สง่างามใน ArchLinux ด้วย GNOME Shell ตอนนี้เมื่อฉันขอปิดมันทันทีปิดโดยไม่ต้องให้เวลาโปรแกรมเปิดเพื่อปิด / บันทึกไฟล์ที่เปิดอย่างสง่างาม เป็นผลให้เมื่อใดก็ตามที่ฉันรีสตาร์ท Chrome (เช่น) มันจะบอกฉันว่าเซสชั่นไม่ได้ปิดอย่างถูกต้อง ฯลฯ โดยการอ่านบนเว็บฉันได้เรียนรู้ว่า systemd ในขณะที่ปิดกระบวนการมันก็ส่งSIGTERM
ตามด้วยSIGKILL
ถ้ากระบวนการไม่ปิด ด้วยการหมดเวลาที่กำหนด อย่างไรก็ตามฉันสังเกตเห็นว่าในระบบของฉันSIGKILL
จะถูกส่งทันทีหลังจากSIGTERM
และฉันเดาว่านี่เป็นสาเหตุของการยกเลิกโปรแกรมที่ไม่สง่างาม
ฉันได้พบเอกสารบางอย่างซึ่ง (ถ้าฉันอ่านอย่างถูกต้อง) ระบุว่าการหมดเวลาก่อนที่จะส่งSIGKILL
สามารถตั้งค่าได้โดยTimeoutStopSec=
ตัวเลือก นอกจากนี้การส่งSIGKILL
อาจถูกปิดใช้งานโดยSendSIGKILL=
ตัวเลือก แต่ฉันไม่สามารถหาตำแหน่งที่จะกำหนดค่าตัวเลือกเหล่านั้น ... จะมีไฟล์การกำหนดค่าการปิดระบบ / รีบูตที่ฉันสามารถตั้งค่าตัวเลือกเหล่านั้น
แก้ไข:
ฉันทำการทดสอบและพบสิ่งที่น่าสนใจสองอย่าง:
- ถ้าฉันปิดโครเมี่ยมด้วยตนเองเช่นนี้
killall -SIGTERM chrome
มันจะไม่บ่นว่ามันไม่ได้ปิดอย่างถูกต้องในครั้งต่อไปที่ฉันเริ่มมันอีกครั้ง ถ้าฉันปิดมันแบบนี้แทนkillall -SIGKILL chrome
มันจะบ่น นี่บอกฉันว่า chrome กำลังจัดการ SIGTERM อย่างถูกต้อง - ดูผลลัพธ์ของโพรซีเดอร์การปิดของฉัน systemd พิมพ์
Sending SIGTERM...
ตามมาทันทีSending SIGKILL...
ตามความคิดเห็นด้านล่าง systemd จัดการกระบวนการของมันเท่านั้น ดังนั้นในกรณีของฉัน GDM สิ่งนี้บอกฉันว่าปัญหาอาจเป็น:
- ทั้ง GDM ไม่ได้ปิดเป็นกระบวนการลูก (เช่น Chrome) อย่างถูกต้อง (เช่นโดยการส่ง SIGTERM ไปให้พวกเขา)
- หรือ systemd กำลังส่งข้อความ SIGKILL ไปยัง GDM ก่อนเวลาไม่ให้เวลากับการปิดลูกของมันอย่างถูกต้อง
มีวิธีตรวจสอบ / กำหนดค่าว่า GDM จะปิดลูก ๆ ของมันได้จริง ๆ หรือไม่?
systemd's
การควบคุม - systemd
คือpid 1
- แต่ Chrome เรียกใช้สคริปต์ตัวตัดคำใน subshell และเรียกใช้กระบวนการลูกหลังจากนั้น แต่ถึงกระนั้นก็จะทำในสิ่งที่มันต้องฆ่ามันzygotes
ตราบเท่าที่ระบบของคุณมีการกำหนดค่าอย่างถูกต้อง คุณกำลังใช้หนึ่งในโซลูชัน temp-space สำหรับ chrome ที่คุณจะพบคำแนะนำใน Arch wiki หรือไม่?
gnome-session
ผู้กระทำผิดที่แท้จริงคือ