SEAL
•Criação de Processos
•Sincronização entre pai e filho
•Execução de programas
•Término de Processo
•Espera pelo término do filho
•Comunicação via sinais
Criação de Processo :Processos são o coração do sistema UNIX. A grande maioria é gerada a partir da chamada de sistema fork. Quando executada com sucesso a chamada fork produz um processo filho que continua sua execução no ponto de sua invocação pelo processo pai.
fork
Função
Cabeçalho
Protótipo
pid_t fork ( void ) ;
Parâmetros
2
-
Resultado
sucesso
fracasso
errno?
(a) 0, (zero) para o filho
(b) pid, do filho para o pai
-1
sim
1
Criação de Processo
#include
#include
#include main () { if (fork () != 0) printf ("Eu sou o pai.\n"); else printf ("Eu sou o filho.\n");
}
shell> a.out
Eu sou o pai.
Eu sou o filho. pai filho
Execução de Programas: Processos geram filhos por várias razões. No UNIX, existem vários processos com vida longa que executam continuamente em background e fornecem serviços sob demanda (daemon – lpd, inetd, routed ). O mais comum é gerar um filho para executar algum outro código diferente do pai. A chamada exec permite transformar o processo filho através da mudança do código a ser executado. Ex: shell> cat file.txt > file2.txt.
•
C hamadas de sistema exec
•
•
•
execlp (2) [→ ] execvp (2) [→ ]
fork & exec tem po
pai
fork
w ait
filh o exe c
exit
2
Execução de Programas: Existem 6 chamadas diferentes para o exec. A diferença básica esta na forma como os argumentos são colocados (l:lista, v:vetor de pointers) e se o programador constrói o ambiente (envp) do processo ou se será usado o PATH corrente para buscar o arquivo executável.
execlp
Função
Cabeçalho
Protótipo
2
int execlp ( const char *file , const char *arg0 ,
…,
const char *argN , char * /* NULL */ ) ;
Retorno
sucesso
fracasso
errno?
não retorna