Linux: ปิดโปรแกรมด้วยบรรทัดคำสั่ง (ไม่ฆ่า)


21

แอปพลิเคชั่นบางตัวอนุญาตหนึ่งอินสแตนซ์ที่กำลังทำงาน (เช่น eclipse หากคุณต้องการใช้พื้นที่ทำงานเดียวกัน) ดังนั้นหากฉันเข้าสู่ระบบจากที่อื่นฉันต้องฆ่า / ปิดแอปพลิเคชันที่เปิดอยู่เมื่อก่อนหน้านี้ฉันลงชื่อเข้าใช้จากที่อื่น

ฉันมักจะใช้คำสั่ง kill เพื่อฆ่ากระบวนการทำงาน แต่ถ้าคุณฆ่ากระบวนการมันอาจจะไม่บันทึกบางสถานะที่มีประโยชน์สำหรับการใช้งานในอนาคต อย่างไรก็ตามหากคุณ "ปิด" อย่างถูกต้องโดยคลิกที่ปุ่มปิดตัวอย่างเช่นมันจะบันทึกสถานะอย่างถูกต้อง

มีวิธีการอย่างถูกต้อง "ปิด" แอปพลิเคชันจากบรรทัดคำสั่งหรือไม่ ฉันรู้ว่าสิ่งนี้อาจแตกต่างจากแอปพลิเคชั่นดังนั้นเราจะเป็นเรื่องทั่วไปมากขึ้น: วิธีการส่งสัญญาณไปยังแอปพลิเคชันอื่นที่กำลังทำงานอยู่และสัญญาณนี้ใช้งานได้ราวกับว่าเราคลิกปุ่ม "ปิด" ในแถบด้านบน


2
เราควรสมมติว่าการเข้าถึงเดสก์ท็อปจากระยะไกลด้วย VNC จากนั้นการคลิกปิดแบบกราฟิกจะทำให้เกิดโอเวอร์เฮดมากเกินไป
Brian Swift

คำตอบ:


33

โดยค่าเริ่มต้นคำสั่ง kill จะส่งSIGTERM(สัญญาณการเลิกจ้าง) ไปยังกระบวนการทำงาน ซึ่งแตกต่างจากSIGKILLซึ่งจะบังคับให้ฆ่ากระบวนการโดยไม่มีโอกาสที่จะตอบสนองSIGTERMสัญญาณสามารถถูกดักจับโดยกระบวนการที่ช่วยให้มันยุติอย่างสง่างาม หรือไม่จริง ๆ แล้วมันจะยุติอย่างสง่างามขึ้นอยู่กับกระบวนการทั้งหมด; มันสามารถฆ่าตัวเองหรือเพิกเฉยต่อสัญญาณได้อย่างง่ายดาย

คุณสามารถมั่นใจได้ว่าคุณกำลังส่งSIGTERMแทนสัญญาณอื่น ๆ โดยการทำให้มันชัดเจนในบรรทัดคำสั่งดังนี้:

kill -s TERM <pid>

1
ใช่หลักฐานของ OP เป็นเท็จ killคำสั่งพยายามปิดที่สง่างาม หากแอปพลิเคชันไม่ปิดลงอย่างสมบูรณ์ในกรณีนั้นแสดงว่ามันใช้งานไม่ได้ (และแอปพลิเคชั่นส่วนใหญ่จะไม่เสีย)
David Schwartz

2
Firefox ดูเหมือนจะ (เสีย) ถ้าฉันเรียกใช้kill -s TERM <firefox-pid>มันจะไม่ปิดลงอย่างสวยงามและเมื่อฉันเริ่มใหม่อีกครั้งมันจะถามฉันว่าฉันต้องการกู้คืนเซสชันที่ล้มเหลวหรือไม่ : ถอนหายใจ:
Wilson F

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.