เป็นอันตรายหรือไม่หากปิดหน้าต่างเทอร์มินัลโดยไม่ออกจากแอปพลิเคชันอย่างถูกต้อง


18

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

matlab -nodisplay -nodesktop -nosplash

จากนั้นเรียกใช้สคริปต์จำนวนมาก จากนั้นฉันก็สามารถทำได้

exit

เพื่อสิ้นสุด MATLAB แล้วปิดหน้าต่างเทอร์มินัลหรือเพียงแค่ปิดหน้าต่างเทอร์มินัล ความแตกต่างระหว่างสองวิธีนี้จริงๆคืออะไร? วิธีที่สองจะ "ทำอันตราย" อย่างใดไหม? เป็นวิธีแรกที่ต้องการหรือไม่ ทำไม?

คำตอบ:


22

โดยทั่วไปแล้วสิ่งนี้น่าจะใช้ได้

เมื่อคุณคลิก "X" เพื่อปิดหน้าต่างเทอร์มินัลนั่นคือการส่ง "สัญญาณ" จากเดสก์ท็อปของคุณ (GNOME, KDE และอื่น ๆ ) ไปยังแอปพลิเคชันเทอร์มินัล เนื่องจากคุณใช้งาน MATLAB ในเชลล์นี้ก็ถือว่าเป็นกระบวนการลูกสำหรับแอปพลิเคชันเทอร์มินัล

ดังนั้นส่วนหนึ่งของความรับผิดชอบในการเป็นกระบวนการหลักคือคุณส่งสัญญาณ "ใกล้" แบบเดียวกันนี้ให้กับลูก ๆ ของคุณ

ทีนี้ถ้าคุณเข้าใจแนวคิดเกี่ยวกับสิ่งที่ฉันเพิ่งอธิบายไปแล้วลองมาแทนที่คำศัพท์จริง ๆ อีกหน่อย

สัญญาณ

ครั้งแรกกับ "สัญญาณ" มีกลุ่มสัญญาณที่แตกต่างกันซึ่งคุณสามารถส่งไปยังกระบวนการ Unix ได้ เพื่อให้มันง่ายมี 4 ที่คุณมักจะเห็น, SIGHUP, SIGTERM, และSIGINTSIGKILL

  • SIGHUP

    สัญญาณ SIGHUP ถูกส่งไปยังกระบวนการเมื่อปิดเทอร์มินัลการควบคุม มันถูกออกแบบมาเพื่อแจ้งให้ทราบถึงกระบวนการของการปล่อยสายอนุกรม ในระบบที่ทันสมัยสัญญาณนี้มักจะหมายความว่าการควบคุมหลอกหรือ terminal เสมือนถูกปิด

  • SIGTERM

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

  • SIGINT

    สัญญาณ SIGINT (“ โปรแกรมขัดจังหวะ”) จะถูกส่งเมื่อผู้ใช้พิมพ์อักขระ INTR (ปกติคือ Cc)

  • SIGKILL

    สัญญาณ SIGKILL ใช้เพื่อทำให้โปรแกรมหยุดทำงานทันที ไม่สามารถจัดการหรือเพิกเฉยได้ดังนั้นจึงเป็นอันตรายถึงชีวิตได้เสมอ นอกจากนี้ยังเป็นไปไม่ได้ที่จะปิดกั้นสัญญาณนี้

หมายเหตุ: SIGINTสิ่งที่ถูกส่งเมื่อคุณใช้Ctrl+ Cเพื่อ "หยุด" โปรแกรมจากบรรทัดคำสั่งในขณะที่โปรแกรมกำลังทำงานอยู่

กำลังใช้อันไหนอยู่

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

คำสั่ง kill

คุณสามารถส่งสัญญาณด้วยตนเองโดยใช้คำสั่งที่มีชื่อไม่ดี, kill. ดังนั้นในการส่งSIGTERMสัญญาณไปยังเทอร์มินัลหรือSIGHUP to MATLAB, you could determine their PID usingps` ของคุณแล้วเรียกใช้คำสั่งนี้เพื่อส่งสัญญาณ:

$ kill -SIGTERM <PID>

หรือสิ่งนี้:

$ kill -SIGHUP <PID>

คุณสามารถรับรายการสัญญาณทั้งหมดโดยใช้คำสั่งนี้:

$ kill -l
 1) SIGHUP   2) SIGINT   3) SIGQUIT  4) SIGILL   5) SIGTRAP
 6) SIGABRT  7) SIGBUS   8) SIGFPE   9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
...
...

สังเกตว่าสัญญาณมีตัวเลขหรือไม่ คุณมักจะเห็นพวกเขาใช้แบบนั้นแทนชื่อ:

$ kill -15 <PID>

หรือน่าอับอาย-9ซึ่งสามารถฆ่ากระบวนการใด ๆ สวย


ฉันคิดเสมอว่าตัวเลขเหล่านั้นเป็นลบ แต่จริงๆแล้วมันคืออาร์กิวเมนต์บรรทัดคำสั่ง ฉันเรียนรู้สิ่งใหม่: D
Thomas

1
HUP - HangUP - เป็นสัญญาณที่ถูกส่งหากคุณ "หลุดสาย" สำหรับเทอร์มินัลเช่นคุณเชื่อมต่อกับเซิร์ฟเวอร์ Unix โดยโมเด็ม อาจเป็นสัญญาณ "อ่อนโยน" ที่สุดที่ยุติกระบวนการ daemons ส่วนใหญ่จะไม่ออก แต่อ่านไฟล์ config อีกครั้งใน HUP คำสั่ง nohup ช่วยให้คุณสามารถให้กระบวนการพื้นหลังดำเนินการต่อหลังจากเปลือกปิด คำสั่งเช่นหน้าจอจะอยู่รอดจากการแฮงเอาท์และป้องกันคำสั่งจาก HUP
Baard Kopperud

@ BaardKopperud - ขอบคุณฉันตั้งใจออกจาก HUP ออกไปโดยไม่ต้องการสับสนระหว่างการสนทนา
slm

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

@ BaardKopperud - ฉันรู้สึกผิดดังนั้นฉันจึงแก้ไขคำตอบเพื่อสะท้อนสิ่งที่เกิดขึ้นอย่างแม่นยำยิ่งขึ้น ขอบคุณ!
slm

2

เป็นไปได้มากที่จะตกลง แต่คุณจะสูญเสียข้อมูลขึ้นอยู่กับแอปพลิเคชันที่คุณเปิด ตัวอย่างเช่นหากคุณเปิดโปรแกรมแก้ไขไฟล์คุณอาจสูญเสียการเปลี่ยนแปลงบางอย่างหากคุณไม่ได้บันทึกและออกอย่างถูกต้อง หากคุณกังวลให้ออกจากระบบ / ออกจากเครื่องอย่างถูกต้อง ถ้าคุณทำไม่ได้เช่นการพิมพ์exitหรือเพียงแค่ลองlogoutCtrl-D


ทำไมจะดีกว่า แอปพลิเคชันจะได้รับ SIGHUP แทนที่จะเป็น SIGTERM แต่สัญญาณยังคงถูกฆ่าโดยสัญญาณดังนั้นฉันจะไม่เรียกมันว่า "บันทึกและออกอย่างถูกต้อง"
Michael Mrozek

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