Bem, a sequência exata pode variar, pois pode haver um alias ou função de shell que primeiro seja expandido / interpretado antes que o programa real seja executado e depois diferenças para um nome de arquivo qualificado ( /usr/libexec/foo) versus algo que será procurado em todos os diretórios da PATHvariável de ambiente (apenas foo). Além disso, os detalhes da execução podem complicar as coisas, pois foo | bar | zotexigem mais trabalho para o shell (um certo número de fork(2), dup(2)e, é claro pipe(2), entre outras chamadas do sistema), enquanto algo como exec fooé muito menos trabalho, pois o shell simplesmente se substitui por o novo programa (ou seja, não fork). Também são importantes grupos de processos (especialmente o grupo de processos em primeiro plano, todos os PIDsSIGINTquando alguém começa a mascarar Ctrl+ C, sessões e se o trabalho será executado em segundo plano, monitorado ( foo &) ou em segundo plano, ignorado ( foo & disown). Os detalhes de redirecionamento de E / S também mudarão as coisas, por exemplo, se a entrada padrão for fechada pelo shell ( foo <&-) ou se um arquivo for aberto como stdin ( foo < blah).
straceou similar será informativo sobre as chamadas de sistema específicas feitas ao longo desse processo, e deve haver páginas de manual para cada uma dessas chamadas. A leitura adequada no nível do sistema seria qualquer número de capítulos da "Programação Avançada no Ambiente UNIX" de Stevens, enquanto um livro de shell (por exemplo, "From Bash to Z Shell") cobrirá o lado do shell com mais detalhes.