วิธีปิดแอปพลิเคชันจากเทอร์มินัลเช่นเดียวกับการออกอย่างถูกต้อง


9

โดยปกติเมื่อเรียกใช้โปรแกรมประยุกต์ในสภาพแวดล้อมแบบกราฟิกเมื่อฉันต้องการที่จะปิดมันฉันคลิกด้านบนมุมของหน้าต่างด้านซ้ายหรือไปที่XFile > Close

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

จากman killสัญญาณเริ่มต้นดูเหมือนจะเป็น 15) SIGTERM สัญญาณนี้จะบอกแอปพลิเคชันที่ฉันพยายามปิดเพื่อล้างข้อมูลปิดไฟล์ที่เปิดอยู่บันทึกสิ่งต่างๆหรือไม่

มีวิธีที่ดีกว่าถ้าฉันต้องการที่จะทำจาก terminal?


2
ขอบคุณที่ถาม! ฉันได้เรียนรู้บางสิ่งที่จะมีประโยชน์ในบางครั้ง
Oliphaunt - คืนสถานะโมนิก้า

คำตอบ:


9

วิธีทั่วไปในการปิดแอปพลิเคชันอย่างงดงามคือการใช้งานkill -TERM 1234ซึ่ง1234เป็น PID ของหน้าต่าง อย่างไรก็ตามปัญหาคือแอปพลิเคชั่นกราฟิกได้รับการออกแบบมาเพื่อรับสัญญาณเฉพาะจากเซิร์ฟเวอร์ X เองโดยไม่ฟังTERMสัญญาณ

นั่นหมายความว่าคุณต้องการตัวแทนบางประเภทระหว่างคุณและเซิร์ฟเวอร์ X เพื่อสื่อสารว่าคุณต้องการส่งสัญญาณที่เหมาะสม แน่นอนคุณสามารถเขียนโปรแกรม C ได้อย่างไรก็ตามมีwmctrlโปรแกรมที่มีอยู่มากมาย(ไม่แปลกใจที่เขียนใน C) ที่ทำสิ่งนั้น

การใช้งานwmctrlง่าย

wmctrl -c :SELECT: # close window that will be selected with pointer
wmctrl -c :ACTIVE: # close currently active window
wmctrl -ic <numeric id> # close window with specific id in hex

มันไม่ได้ติดตั้งตามค่าเริ่มต้นดังนั้นไปด้วย sudo apt-get install wmctrl

มีประโยชน์หลายอย่างที่wmctrlไกลเกินกว่าแค่ปิดหน้าต่างดังนั้นโปรดดูคำตอบของฉันและ Jacob Vlijm สำหรับตัวอย่างของสคริปต์ที่มีการใช้งาน


2
เพียงเพิ่มที่นี่ที่wmctrl -lจะแสดงรายการหน้าต่างทั้งหมดและให้รหัสตัวเลขในฐานสิบหกในคอลัมน์แรก =)
Terrance

ขอบคุณใช้งานได้ดีกับแอพพลิเคชั่นส่วนใหญ่ แต่ด้วย Deluge มีตัวเลือกMinimize to tray on closeและwmctrl -cจะปิดหน้าต่างไม่ใช่แอปพลิเคชันตัวเองมันจะยังคงทำงานต่อไปจนถึงถาด
Mike

3

ฉันคิดว่ามันคุ้มค่าที่wmctrl -xlจะเพิ่มผลลัพธ์เช่นนี้:

0x03000001 -1 google-chrome.google-chrome  dcentore-pc Rybak - Google Play Music - Google Chrome
0x04600006  0 speedcrunch.Speedcrunch  dcentore-pc SpeedCrunch

ตำแหน่งที่xร้องขอคลาสหน้าต่างให้อยู่ในเอาต์พุต นี่เป็นวิธีที่ง่ายที่สุดในการปิดโปรแกรมเดียวกันทุกครั้ง จากนั้นเราสามารถจัดหาคลาสหน้าต่างเมื่อปิด:

wmctrl -xc speedcrunch.Speedcrunch

ตัวอย่างนี้จะปิด speedcrunch

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