GNU/Linux >> Linux Esercitazione >  >> Linux

Perché questa pipeline di shell termina?

Il piping funziona collegando l'uscita di un processo A all'ingresso di B. La connessione può essere interrotta quando

  • A chiude il suo output. B otterrà EOF.
  • B chiude il suo input. A riceverà un errore che l'output non è più disponibile quando tenta di scrivere il byte successivo.

Poiché questi due casi sono così comuni, la gestione è stata spostata nella libreria C standard.


head chiude il file di input dopo aver letto la quantità richiesta. quando una pipe viene chiusa da un lato, l'altro riceve errori di scrittura; questo causa base64 per chiudersi, che a sua volta provoca cat per chiudere.


Dopo base64 emette 10 byte, head ottiene abbastanza ingressi e uscite. Quando il primo tenta di emettere più byte, riceverà il segnale SIGPIPE e quindi uscirà anche lui. Per lo stesso motivo, cat uscirà a sua volta.


Linux
  1. Perché la sostituzione del comando Shell divora un carattere di nuova riga finale?

  2. Perché questo "durante la lettura" funziona in un terminale, ma non in uno script di shell?

  3. Perché "ls" richiede un processo separato per l'esecuzione?

  4. Perché Ctrl + V non incolla in Bash (shell Linux)?

  5. Perché questa espressione regolare non funziona su Linux?

Perché Ls -l genera una dimensione diversa da Ls -s?

TMOUT – Esce automaticamente dalla shell Unix quando non c'è attività

Perché Linux emette sempre ^C premendo Ctrl+C?

Bash:perché lo script genitore non termina su SIGINT quando lo script figlio intercetta SIGINT?

Perché popen() invoca una shell per eseguire un processo?

Perché clang genera testo incomprensibile quando viene reindirizzato?