Те, що процес "відхилений", має значення лише для інтерактивної оболонки, яка створила цей процес. Це означає, що оболонка не включає (більше) процес у свою таблицю завдань, і SIGHUP не буде відправлений до цього процесу, коли оболонка вийде. Це насправді не пов’язано з вашими питаннями.
Про те, що відбувається з виходами, які надсилаються до видаленого віртуального терміналу: я зробив декілька тестів, і я помітив, що /dev/pts/x
пристрої недоступні і не будуть виділятися знову, поки всі файлові сценарії, які вказують на них, не будуть закриті. Отже, я не бачу причини, чому запис на видалений термінал буде зберігатися. Я думаю, це навіть не визначено POSIX.
Щодо захоплення виводу якогось процесу, який записується в термінал, я не думаю, що це можливо, навіть коли термінал ще живий¹. Все, що ви можете зробити - це захопити прямий вхід до терміналу (тобто натискання клавіш або симульовані натискання клавіш головною частиною pty). Якщо процеси читають на stdin те, що записується на їх термінали, це призвело б до циклу самоізоляції для більшості процесів.
Щодо останнього зауваження про припинення процесу, я не знаю, що відбувається, але я б підозрював досить дивні поведінки з сигналами (SIGTTOU, SIGTTIN, SIGHUP або іншими), пов’язаними із станом переднього плану / фонового стану під час сесії лідер виходить (наприклад su
, у випадку, про який ви згадали).
Відповідь на " Правка": Ні, щодо виводу, нічого не змінюється, коли процес відключений: він як і раніше приєднаний до свого керуючого терміналу (якщо тільки він не від'єднався вже так, як це роблять демони). Ви можете бачити це, використовуючи ps
. Однак ви більше не зможете використовувати fg
/ bg
/ jobs
команди, надані оболонкою для цього процесу. Це означає, що може бути важко подати його на вхід з терміналу (вимагає бути у передній групі процесів).
-
1. за винятком випадків, коли процес не бажає або не викрадений деякими інструментами налагодження (див. Коментарі вище).