Il fatto che un processo sia "rinnegato" ha solo un significato per la shell interattiva che ha creato questo processo. Significa che la shell non include (più) il processo nella sua tabella dei lavori e che SIGHUP non verrà inviato a questo processo quando la shell esce. Non è realmente correlato alle tue domande.
Informazioni su ciò che accade agli output inviati a un terminale virtuale eliminato: ho eseguito alcuni test da solo e ho notato che i /dev/pts/x
dispositivi non sono accessibili e non verranno allocati di nuovo fino a quando tutti i descrittori di file che puntano a loro non saranno chiusi. Quindi, non riesco a vedere un motivo per cui le scritture su un terminale eliminato verrebbero memorizzate. Suppongo che questo non sia nemmeno definito da POSIX.
A proposito di afferrare l'output di un processo che scrive su un terminale, non penso che sia possibile, anche quando il terminale è ancora vivo¹. Tutto quello che puoi fare è afferrare l'ingresso diretto al terminale (ovvero i tasti premuti o i tasti simulati dalla parte principale di un pty). Se i processi leggessero su stdin ciò che è scritto sui loro terminali, ciò porterebbe a un loop self io per la maggior parte dei processi.
A proposito dell'ultima osservazione sulla conclusione del processo, non so davvero cosa stia accadendo, ma sospetterei comportamenti piuttosto strani con segnali (SIGTTOU, SIGTTIN, SIGHUP o altri) relativi allo stato di primo piano / sfondo dei gruppi di processi, quando la sessione il leader esce (ad esempio su
, nel caso in cui hai menzionato).
Risposta alla modifica: No, rispetto all'output, non cambia nulla quando un processo viene rinnegato: è ancora collegato al suo terminale di controllo (a meno che non si sia già staccato come i demoni). Puoi vederlo usando ps
. Tuttavia, non sarà più possibile utilizzare i comandi fg
/ bg
/ jobs
forniti dalla shell per questo processo. Ciò significa che potrebbe essere difficile alimentarlo con l'input dal terminale (richiede di essere nel gruppo di processo in primo piano).
-
1. a meno che il processo non sia disposto o dirottato con alcuni strumenti di debug (vedere i commenti sopra).