นี่เป็นคำถามที่ได้รับการแก้ไขหลายครั้งไม่เพียง แต่ที่นี่ แต่ยังอยู่ในไซต์อื่น ๆ ของเครือข่ายแลกเปลี่ยนสแต็ก (เช่นวิธีทำให้ ssh เพื่อฆ่ากระบวนการระยะไกลเมื่อฉันขัดจังหวะ ssh เอง ) อย่างไรก็ตามฉันไม่สามารถแก้ปัญหาใด ๆ ได้สำหรับฉัน
ฉันใช้คำสั่งผ่าน ssh เมื่อใดก็ตามที่ฉันออกจาก ssh ฉันต้องการให้คำสั่งตายเช่นกัน คำสั่งนี้เป็น daemon ชื่อ ktserver ที่รันไปเรื่อย ๆ จนกว่าคุณจะกด Ctrl-C
ฉันรันมันดังนี้: ssh -t compute-0-1 ktserver
และแน่นอนเมื่อฉันกด Ctrl-C กระบวนการจะสิ้นสุดลงอย่างสวยงามและสิ้นสุดเซสชัน ssh
อย่างไรก็ตามถ้าแทนที่จะกด Ctrl-C ฉันจะฆ่ากระบวนการ ssh โดยใช้kill
คำสั่ง (ตัวอย่างเช่นการส่ง SIGINT หรือ SIGHUP) ktserver
กระบวนการจะยังคงอยู่
ฉันจะทำให้คนktserver
ตายมักเป็นอิสระจากการssh
ถูกฆ่าได้อย่างไร
แก้ไข : หากแทนที่จะให้ktserver
ฉันทำบางสิ่งที่แตกต่างอย่างสิ้นเชิงเช่นgedit
ทุกอย่างทำงานเหมือนมีเสน่ห์ (เช่น gedit ตายเมื่อการเชื่อมต่อตาย) ดังนั้นอาจมีบางอย่างผิดปกติกับกระบวนการของตัวเอง ตัวอย่างเช่นฉันคิดว่าอาจละเว้น SIGHUP หรือ SIGINT อย่างไรก็ตามเมื่อฉันเรียกใช้kill -1 ktserver
หรือkill -2 ktserver
กระบวนการตายตามที่คาดไว้
แก้ไข 2 : ตามที่ Mark Plotnick ชี้ให้เห็นปัญหาเกี่ยวข้องกับความจริงที่ว่าไม่มีการสื่อสารหมุนเวียนในช่อง ssh ฉันได้รับการยืนยันโดยการทำงานssh -t <host> read
และการฆ่ากระบวนการ ssh ในภายหลัง read
ยังมีชีวิตอยู่และเตะ
ssh example.com dd ...
ทำงานให้เสร็จแม้เวลาผ่านไปหลายชั่วโมงหลังจากการssh
เชื่อมต่อขาดตอนเนื่องจากปัญหาเครือข่าย หากคุณสามารถเปลี่ยนktserver
เป็นตัวเลือกในการส่งออกบางสิ่งบางอย่างในชั่วขณะหนึ่งนั่นอาจเป็นการแก้ไข
read
ในคอมพิวเตอร์ระยะไกลและหลังจากฆ่าการเชื่อมต่อ ssh read
ไม่ได้ตาย น่าเสียดายที่ฉันไม่สามารถเปลี่ยน ktserver เพื่อแสดงผลอะไรได้ ไม่มีวิธีแก้ปัญหาแล้ว?
shopt -s huponexit
) คุณสามารถทดสอบว่าสิ่งนี้เหมาะกับคุณหรือไม่?
kill -9 ktserver
ไหม