Без -t
, sshd
отримують стандартний висновок віддаленої оболонки (і дитина , як sleep
) і STDERR через дві труби (а також відправляє введення клієнта через іншу трубу).
sshd
дійсно чекає процесу, в якому він запустив оболонку входу користувача, але також, після того, як цей процес припиниться, чекає eof на stdout трубі (не трубі stderr у разі opensh принаймні).
І eof трапляється тоді, коли дескриптор файлу не відкривається жодним процесом, відкритим на кінці запису труби, що, як правило, відбувається лише тоді, коли всі процеси, які не мали свого stdout, перенаправлені на щось інше, пішли.
При використанні -t
, sshd
не використовуйте труби. Натомість вся взаємодія (stdin, stdout, stderr) з віддаленою оболонкою та її дітьми здійснюється за допомогою однієї псевдотермінальної пари.
З псевдотермінальною парою, для sshd
взаємодії з головним боком, немає подібного керування eof або будь-якого способу дізнатися, чи все ще існують процеси з FDS, відкритими на підлеглій стороні псевдотермінала, тому він просто чекає припинення процес, в якому він виконав оболонку входу віддаленого користувача, а потім виходить.
Після цього виходу головна частина pty пари закривається, що означає, що pty знищений, тому процеси, керовані веденим, отримають SIGHUP (що за замовчуванням припиняє їх).