ทำไมกระบวนการระยะไกลของฉันยังคงทำงานหลังจากที่ฆ่าเซสชัน ssh


15

ฉันกำลังปรับแต่งไฟล์บันทึกระยะไกลโดยใช้คำสั่งนี้ในเชลล์ท้องถิ่น:

ssh remotemachine tail -100f /path/to/error_file

เมื่อฉัน ctrl-c ออกจากคำสั่งนี้ดูเหมือนว่า ctrl-c ฆ่ากระบวนการ ssh ท้องถิ่นและปล่อยให้หางของฉันทำงานบนเครื่องระยะไกล ฉันตกอยู่ภายใต้ความประทับใจที่การเชื่อมต่อที่ขาดหายไปจะส่งสัญญาณ Hangup (เนื่องจากฉันไม่ได้ใช้ nohup) และฆ่ากระบวนการ แต่นั่นไม่ใช่กรณีที่ชัดเจน

ใครสามารถสลัดแสงเพิ่มเติมได้บ้างเมื่อมีการส่งสัญญาณ Hangup และเมื่อไม่มีสัญญาณ? เครื่องระยะไกลคือ Ubuntu และเชลล์ในเครื่องของฉันคือ OS X ทุบตีหากสิ่งใดสิ่งหนึ่งสร้างความแตกต่าง

คำตอบ:


13

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

คุณสามารถหลีกเลี่ยงปัญหานี้ได้ด้วยการเรียกใช้ด้วยตัวเลือก -t ซึ่งทำให้มันเป็นสถานีควบคุม สิ่งนี้จะทำให้กระบวนการยุติเมื่อคุณ ctrl-c คำสั่ง ssh จากระยะไกล

-tตัวเลือก:

บังคับการจัดสรรแบบหลอก สิ่งนี้สามารถใช้เพื่อรันโปรแกรมบนหน้าจอโดยพลการบนเครื่องระยะไกลซึ่งมีประโยชน์มากเช่นเมื่อใช้งานบริการเมนู อ็อพชัน -t หลายตัวบังคับให้จัดสรร tty แม้ว่า ssh จะไม่มี tty โลคัล

ดูที่man sshและman sshdเมื่อคุณใช้ตัวเลือกนี้เนื่องจากมีความหมายอื่น ๆ ของการมีเทอร์มินัลการควบคุมเช่นความสามารถในการส่งตัวอักษรหลบหนี

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