Không có -t
, sshd
nhận được thiết bị xuất chuẩn của vỏ từ xa (và trẻ em thích sleep
) và thiết bị xuất chuẩn thông qua hai ống (và cũng gửi đầu vào của khách hàng qua một ống khác).
sshd
không chờ đợi quá trình nó đã khởi động shell đăng nhập của người dùng, nhưng đồng thời, sau khi quá trình đó kết thúc, hãy chờ đợi eof trên ống stdout (không phải là ống stderr trong trường hợp opensh ít nhất).
Và eof xảy ra khi không có bộ mô tả tệp bởi bất kỳ quy trình nào mở ở đầu viết của ống, điều này thường chỉ xảy ra khi tất cả các quy trình không được chuyển hướng xuất sắc của chúng sang một thứ khác.
Khi bạn sử dụng -t
, sshd
không sử dụng đường ống. Thay vào đó, tất cả các tương tác (stdin, stdout, stderr) với shell từ xa và các phần tử con của nó được thực hiện bằng cách sử dụng một cặp đầu cuối giả.
Với cặp đầu cuối giả, để sshd
tương tác với phía chủ, không có cách xử lý eof tương tự hoặc bất kỳ cách nào để biết liệu vẫn còn các quy trình với fds mở cho phía nô lệ của thiết bị đầu cuối giả hay không, vì vậy nó chỉ chờ kết thúc quá trình nó thực thi shell đăng nhập của người dùng từ xa và sau đó thoát.
Khi thoát ra, phía chủ của cặp pty bị đóng, điều đó có nghĩa là pty bị phá hủy, do đó các quá trình được kiểm soát bởi nô lệ sẽ nhận được SIGHUP (theo mặc định sẽ chấm dứt chúng).