Se chiudo il terminale virtuale, dove è stato avviato un processo, l'output va direttamente a /dev/null
, o può inquinare la memoria in qualche modo?
Posso comunque prendere l'output per continuare a leggerlo in qualsiasi momento?
[EDIT]:Quindi, il momento di rinnegare un processo è effettivamente una fine del mio potere di controllarne l'output?
Ho anche notato che se rinuncio a un processo interrotto, all'inizio sembra tutto normale:non viene né terminato né mostrato nei lavori. Ma se mi disconnetto (e non significa chiudere il terminale, basta uscire da su
, ad esempio), il processo viene terminato. Tuttavia, un processo disconosciuto in esecuzione in background può rimanere in esecuzione.
Risposta accettata:
Il fatto che un processo sia "rinnegato" ha un significato solo 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.
A proposito di cosa succede agli output che vengono inviati a un terminale virtuale cancellato:ho fatto alcuni test io stesso e ho notato che /dev/pts/x
i dispositivi non sono accessibili e non verranno assegnati nuovamente fino a quando tutti i descrittori di file che puntano ad essi non saranno stati chiusi. Quindi, non riesco a vedere un motivo per cui le scritture su un terminale eliminato verrebbero archiviate. Immagino che questo non sia nemmeno definito da POSIX.
Riguardo all'acquisizione dell'output di un processo che scrive su un terminale, non credo sia possibile, anche quando il terminale è ancora vivo¹. Tutto quello che puoi fare è prendere l'input diretto al terminale (cioè sequenze di tasti o sequenze di tasti simulate dalla parte principale di un pty). Se i processi leggessero su stdin ciò che è scritto sui loro terminali, ciò porterebbe a un ciclo io automatico per la maggior parte dei processi.
Riguardo all'ultima osservazione sulla terminazione del processo, non so davvero cosa stia succedendo, ma sospetterei comportamenti piuttosto strani con segnali (SIGTTOU, SIGTTIN, SIGHUP o altri) relativi allo stato in primo piano/sfondo dei gruppi di processi, quando la sessione uscite leader (es. su
, nel caso da te citato).
Risposta alla Modifica: No, per quanto riguarda l'output, non cambia nulla quando un processo viene disconosciuto:è ancora collegato al suo terminale di controllo (a meno che non si sia già staccato come fanno i demoni). Puoi vederlo usando ps
. Tuttavia, non potrai utilizzare fg
/bg
/jobs
comandi forniti dalla shell più per questo processo. Ciò significa che potrebbe essere difficile alimentarlo con l'input dal terminale (è necessario essere nel gruppo di processi in primo piano).
—