paulo1205
(usa Ubuntu)
Enviado em 05/06/2017 - 01:04h
Um shell no UNIX tem as seguintes atribuições:
- reconhecer os comandos que lhe são passados, sabendo separar partes distintas (e.g. nomes de comandos, argumentos, modificadores, redirecionamentos etc.) e tratá-las adequadamente;
- dependendo do comando, criar subprocessos, redirecionar entrada e saídas e executar comandos externos nesses subprocessos (para tanto, é preciso conhecer o ciclo de vida de processos do UNIX);
- saber associar e dissociar o terminal de um determinado conjunto de processos relacionados, conhecendo o que é uma sessão, um líder de sessão,
process groups,
jobs e eventos produzidos pelo terminal ou por causa dele (coletivamente conhecidos como
job control).
Referências que eu recomendo:
- manpage de
termios do BSD, particularmente a seção
Job Control in a Nutshell (por exemplo, como a de
http://man.netbsd.org/).
- manpages de
fork(),
waitpid(),
kill(),
sigaction() e
execve().
- livro
Advanced Programming in the UNIX Environment, de Richard W. Stevens.