Come funzionano esattamente i programmi oi comandi della shell bash sui sistemi Linux?
Sto studiando come funzionano i processi e la shell nel sistema Linux. Vorrei consultarvi per vedere se le mie conclusioni sono corrette.
Quando avviamo il sistema, il kernel avvia il processo di inizializzazione, tutto il resto viene eseguito come sottoprocesso con il fork di questo processo. Ad esempio, quando eseguo un programma, il processo padre viene biforcato per questo programma e quindi il processo biforcuto diventa il processo figlio (o sottoprocesso) che esegue il programma con exec. Se questo è il caso, ad esempio, quando eseguo la shell bash, il processo genitore biforcato ed exec rende il processo biforcuto il processo figlio su cui verrà eseguito il programma bash. A questo punto, ciò che mi imbatte in me è come vengono eseguiti i comandi che inseriamo nella shell bash. Come vengono eseguiti i comandi integrati ed esterni? Ad esempio, i comandi incorporati eseguono il fork o creano sottoprocessi per loro?
Risposte
Quello che chiedi sarà vero per tutti gli Unix, non solo per Gnu / Linux.
La cosa da notare è che dopo un fork, non è necessario eseguire. Quindi per i built-in di shell la shell eseguirà il fork, quindi eseguirà il comando integrato.
La shell eseguirà anche il fork per una sub-shell. La shell non esegue il fork quando non è necessario: ad esempio per semplici comandi incorporati. Where simple include non in una pipeline.
Ci sono anche (non menzionati nella tua domanda) i tubi. Questi sono creati prima della forcella, ma cablati dopo la fork, e prima del, opzionale (vedi built-in), exec.