Đây là một câu hỏi đã được giải quyết nhiều lần, không chỉ ở đây, mà còn ở các trang web khác của mạng trao đổi ngăn xếp (ví dụ: Làm thế nào để tạo ssh để giết tiến trình từ xa khi tôi tự ngắt ssh? ). Tuy nhiên, tôi không thể làm cho bất kỳ giải pháp nào làm việc cho tôi.
Tôi đang chạy một lệnh thông qua ssh. Bất cứ khi nào tôi thoát ssh, tôi cũng muốn lệnh chết. Lệnh này là một daemon gọi là ktserver chạy vô thời hạn cho đến khi bạn nhấn Ctrl-C.
Tôi chạy nó như sau: ssh -t compute-0-1 ktservervà, thực sự, khi tôi nhấn Ctrl-C, quá trình kết thúc một cách duyên dáng và phiên ssh kết thúc.
Tuy nhiên, nếu thay vì nhấn Ctrl-C, tôi sẽ giết tiến trình ssh bằng killlệnh (ví dụ: gửi SIGINT hoặc SIGHUP), ktserverquá trình này vẫn tồn tại.
Làm thế nào tôi có thể làm cho cái ktserverchết luôn luôn độc lập về cách sshbị giết?
EDIT : Nếu, thay vì ktservertôi chạy một cái gì đó hoàn toàn khác, chẳng hạn như gedit, mọi thứ hoạt động như một bùa mê (tức là gedit chết khi kết nối chết). Do đó, có thể có một cái gì đó sai với chính quá trình. Ví dụ, tôi nghĩ rằng nó có thể bỏ qua SIGHUP hoặc SIGINT. Tuy nhiên, khi tôi chạy kill -1 ktserverhoặc kill -2 ktserver, quá trình chết như mong đợi.
EDIT2 : Như Mark Plotnick chỉ ra, vấn đề liên quan đến thực tế là không có giao tiếp lưu thông trên kênh ssh. Tôi đã xác nhận bằng cách chạy ssh -t <host> readvà giết tiến trình ssh sau đó. readvẫn còn sống và đá
ssh example.com dd ...công việc chạy đến hoàn thành thậm chí nhiều giờ sau khi sshkết nối bị chết do sự cố mạng. Nếu bạn có thể thay đổi ktserverđể có một tùy chọn để xuất một cái gì đó một lần trong một thời gian, đó có thể là một cách giải quyết.
read trên máy tính từ xa và sau khi tắt kết nối ssh, readnó đã không chết. Thật không may, tôi không thể thay đổi ktserver để xuất bất cứ thứ gì. Không có giải pháp thì sao?
shopt -s huponexit). Bạn có thể kiểm tra nếu điều này làm việc cho bạn?
kill -9 ktserverchưa