Đâ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 ktserver
và, 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 kill
lệnh (ví dụ: gửi SIGINT hoặc SIGHUP), ktserver
quá trình này vẫn tồn tại.
Làm thế nào tôi có thể làm cho cái ktserver
chết luôn luôn độc lập về cách ssh
bị giết?
EDIT : Nếu, thay vì ktserver
tô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 ktserver
hoặ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> read
và giết tiến trình ssh sau đó. read
vẫ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 ssh
kế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, read
nó đã 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 ktserver
chưa