Тот факт, что процесс «отвергнут», имеет значение только для интерактивной оболочки, создавшей этот процесс. Это означает, что оболочка (больше) не включает процесс в свою таблицу заданий и что SIGHUP не будет отправляться этому процессу при выходе из оболочки. Это на самом деле не связано с вашими вопросами.
О том, что происходит с выходными данными, которые отправляются на удаленный виртуальный терминал: я сам провел несколько тестов и заметил, что /dev/pts/x
устройства недоступны и не будут распределяться снова, пока все файловые дескрипторы, которые указывают на них, не будут закрыты. Итак, я не вижу причины, по которой записи в удаленный терминал будут сохранены. Я предполагаю, что это даже не определено POSIX.
Насчет вывода какого-либо процесса, который пишет в терминал, я не думаю, что это возможно, даже когда терминал еще жив ». Все, что вы можете сделать, это захватить прямой ввод на терминал (т.е. нажатия клавиш или симулированные нажатия клавиш основной частью pty). Если бы процессы читали на stdin то, что записано на их терминалы, это привело бы к циклу self io для большинства процессов.
Что касается последнего замечания о завершении процесса, я действительно не знаю, что происходит, но я подозреваю довольно странное поведение с сигналами (SIGTTOU, SIGTTIN, SIGHUP или другими), связанными с основным / фоновым состоянием групп процессов, когда сеанс Лидер выходит (например su
, в случае, вы упомянули).
Ответ на редактирование: Нет, что касается вывода, ничего не меняется, когда процесс отсоединяется: он все еще подключен к своему управляющему терминалу (если только он не отключился, как это делают демоны). Вы можете увидеть это, используя ps
. Однако вы больше не сможете использовать fg
/ bg
/ jobs
команды, предоставленные оболочкой для этого процесса. Это означает, что это может быть затруднительно для подачи данных с терминала (требуется быть в группе процессов переднего плана).
-
1. если процесс не хочет или не угнан какими-либо инструментами отладки (см. Комментарии выше).