Diferenças
Aqui você vê as diferenças entre duas revisões dessa página.
| Ambos lados da revisão anterior Revisão anterior Próxima revisão | Revisão anterior | ||
| so:criacao_de_processos [2010/04/16 21:25] – maziero | so:criacao_de_processos [2022/11/04 13:00] (atual) – maziero | ||
|---|---|---|---|
| Linha 1: | Linha 1: | ||
| + | ====== Criação de processos em Unix ====== | ||
| + | A criação de processos em UNIX é feita através das chamadas de sistema '' | ||
| + | |||
| + | ===== Exercício 1 ===== | ||
| + | |||
| + | Dado o programa '' | ||
| + | |||
| + | <code c fork.c> | ||
| + | /* | ||
| + | Criação de processos em UNIX. | ||
| + | |||
| + | Compilar com gcc -Wall fork.c -o fork | ||
| + | |||
| + | Carlos Maziero, DINF/UFPR 2020 | ||
| + | */ | ||
| + | |||
| + | #include < | ||
| + | #include < | ||
| + | #include < | ||
| + | #include < | ||
| + | #include < | ||
| + | |||
| + | int main () | ||
| + | { | ||
| + | int retval ; | ||
| + | |||
| + | printf ("Ola, sou o processo %5d\n", | ||
| + | retval = fork () ; | ||
| + | printf (" | ||
| + | |||
| + | if ( retval < 0 ) // erro no fork() | ||
| + | { | ||
| + | perror (" | ||
| + | exit (1) ; | ||
| + | } | ||
| + | else | ||
| + | if ( retval > 0 ) // sou o processo pai | ||
| + | wait (0) ; | ||
| + | else // sou o processo filho | ||
| + | sleep (5) ; | ||
| + | |||
| + | printf (" | ||
| + | exit (0) ; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | - Analise seu código e o comente detalhadamente. | ||
| + | - Desenhe o [[diagrama de tempo]] de sua execução. | ||
| + | |||
| + | ===== Exercício 2 ===== | ||
| + | |||
| + | Dado o programa '' | ||
| + | |||
| + | <code c fork-execve.c> | ||
| + | /* | ||
| + | Criação de processos em UNIX, com execução de outro binário | ||
| + | |||
| + | Compilar com gcc -Wall fork-execve.c -o fork-execve | ||
| + | |||
| + | Carlos Maziero, DINF/UFPR 2020 | ||
| + | */ | ||
| + | |||
| + | #include < | ||
| + | #include < | ||
| + | #include < | ||
| + | #include < | ||
| + | #include < | ||
| + | |||
| + | int main (int argc, char *argv[], char *envp[]) | ||
| + | { | ||
| + | int retval ; | ||
| + | |||
| + | printf ("Ola, sou o processo %5d\n", | ||
| + | retval = fork () ; | ||
| + | printf (" | ||
| + | |||
| + | if ( retval < 0 ) // erro no fork () | ||
| + | { | ||
| + | perror (" | ||
| + | exit (1) ; | ||
| + | } | ||
| + | else | ||
| + | if ( retval > 0 ) // sou o processo pai | ||
| + | wait (0) ; | ||
| + | else // sou o processo filho | ||
| + | { | ||
| + | execve ("/ | ||
| + | perror (" | ||
| + | } | ||
| + | |||
| + | printf (" | ||
| + | exit (0) ; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | - Analise seu código e o comente detalhadamente. | ||
| + | - Desenhe o [[diagrama de tempo]] de sua execução. | ||
| + | - O que ocorre se o programa a ser executado por '' | ||
| + | |||
| + | ===== Exercício 3 ===== | ||
| + | |||
| + | Dado o programa '' | ||
| + | |||
| + | <code c fork-print.c> | ||
| + | /* | ||
| + | Criação de processos em UNIX, com impressão de valores de variável. | ||
| + | |||
| + | Compilar com gcc -Wall fork-print.c -o fork-print | ||
| + | |||
| + | Carlos Maziero, DINF/UFPR 2020 | ||
| + | */ | ||
| + | |||
| + | #include < | ||
| + | #include < | ||
| + | #include < | ||
| + | #include < | ||
| + | #include < | ||
| + | |||
| + | int main () | ||
| + | { | ||
| + | int retval, x ; | ||
| + | |||
| + | x = 0 ; | ||
| + | retval = fork () ; | ||
| + | printf ("No processo %5d x vale %d\n", getpid(), x) ; | ||
| + | |||
| + | if ( retval < 0 ) | ||
| + | { | ||
| + | perror (" | ||
| + | exit (1) ; | ||
| + | } | ||
| + | else | ||
| + | if ( retval > 0 ) | ||
| + | { | ||
| + | x = 0 ; | ||
| + | wait (0) ; | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | x++ ; | ||
| + | sleep (5) ; | ||
| + | } | ||
| + | |||
| + | printf ("No processo %5d x vale %d\n", getpid(), x) ; | ||
| + | exit (0) ; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | - Analise seu código e o comente detalhadamente. | ||
| + | - Desenhe o [[diagrama de tempo]] de sua execução, indicando a evolução do valor da variável '' | ||
| + | |||
| + | ===== Observações ===== | ||
| + | |||
| + | * Informações detalhadas sobre as chamadas de sistema utilizadas podem ser encontradas nas páginas de manual do sistema UNIX. | ||
| + | |||
| + | * Um relatório [[teaching: | ||