GNU/Linux >> Linux Esercitazione >  >> Linux

Cosa succede all'output di un processo che è stato rinnegato e ha perso il suo terminale?

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).

Correlati:rimozione dei caratteri di controllo (inclusi codici e colori della console) dall'output dello script?



Linux
  1. Leggi e scrivi dati da qualsiasi luogo con reindirizzamento nel terminale Linux

  2. Cosa succede quando un thread si biforca?

  3. Qual è la differenza tra ls e l?

  4. Qual è la differenza tra kernel preventivo non preventivo, preventivo e selettivo?

  5. Come limitare le risorse totali (memoria) di un processo e dei suoi figli

L'output del comando `tty` e il file `/dev/tty` si riferiscono entrambi al terminale di controllo dell'attuale processo Bash?

SIGTERM vs SIGKILL:qual è la differenza?

Qual è la differenza tra le catene OUTPUT e FORWARD in iptables?

Qual è la differenza tra kill , pkill e killall?

Cosa succede quando un file che è stato impaginato al 100% nella cache della pagina viene modificato da un altro processo

Qual è la differenza tra unlink e rm?