Bem, a sequência exata pode variar, pois pode haver um alias ou função de shell que primeiro seja expandida / interpretada antes que o programa seja executado e, em seguida, diferenças para um nome de arquivo qualificado ( /usr/libexec/foo
) versus algo que será procuramos por todos os diretórios da variável de ambiente PATH
(apenas foo
). Além disso, os detalhes da execução podem complicar, pois foo | bar | zot
requer mais trabalho para o shell (alguns fork(2)
, dup(2)
e, é claro, pipe(2)
, entre outras chamadas do sistema), enquanto algo como exec foo
é muito menos trabalho como o shell apenas substitui-se com o novo programa (ou seja, não fork
). Também são importantes os grupos de processos (especialmente o grupo de processos em primeiro plano, todos os PIDs que comem SIGINT
quando alguém inicia o processamento em 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 é aberto como stdin ( foo < blah
).
strace
ou similar será informativo sobre as chamadas de sistema específicas feitas ao longo deste processo, e deve haver páginas de manual para cada uma dessas chamadas. A leitura adequada do 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, "Do Bash ao Z Shell") abordará o lado do shell em detalhes.