Tại sao quá trình từ xa của tôi vẫn chạy sau khi giết một phiên ssh?


15

Tôi đang theo dõi một logfile từ xa bằng cách chạy lệnh này trong shell cục bộ:

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

Khi tôi ctrl-c ra khỏi lệnh này, có vẻ như ctrl-c sẽ giết tiến trình ssh cục bộ và để đuôi của tôi chạy trên máy từ xa. Tôi có ấn tượng rằng việc ngắt kết nối sẽ gửi tín hiệu gác máy (vì tôi không sử dụng nohup) và giết quá trình, nhưng rõ ràng đó không phải là trường hợp.

Bất cứ ai cũng có thể làm sáng tỏ hơn khi tín hiệu gác máy được gửi và khi nào không? Máy từ xa là Ubuntu và shell cục bộ của tôi là OS X bash nếu một trong hai tạo ra sự khác biệt.

Câu trả lời:


13

Hành vi này bắt nguồn từ việc thiếu thiết bị đầu cuối kiểm soát cho quá trình đang chạy. Khi tiến trình từ xa không có thiết bị đầu cuối điều khiển, quy trình ssh từ xa xử lý phiên của bạn không thể giết lệnh, bị treo trong trạng thái zombie để cuối cùng được dọn sạch bởi init.

Bạn có thể khắc phục điều này bằng cách chạy nó với tùy chọn -t, cung cấp cho nó một thiết bị đầu cuối điều khiển. Điều này sẽ khiến quá trình chấm dứt khi bạn ctrl-c lệnh ssh của bạn từ xa.

Các -t tùy chọn:

Buộc phân bổ giả. Điều này có thể được sử dụng để thực thi các chương trình dựa trên màn hình tùy ý trên một máy từ xa, có thể rất hữu ích, ví dụ như khi triển khai các dịch vụ menu. Nhiều tùy chọn -t buộc phân bổ tty, ngay cả khi ssh không có tty cục bộ.

Hãy xem man sshman sshd khi bạn sử dụng tùy chọn này vì có những tác động khác của việc có một thiết bị đầu cuối kiểm soát, ví dụ như khả năng gửi các ký tự thoát.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.