A Criação de Processos em Linux
Por: 41f5b50ab0 • 11/5/2021 • Relatório de pesquisa • 541 Palavras (3 Páginas) • 102 Visualizações
Experiência 04 – Criação de processos em Linux.
A chamada de sistema fork() é utilizada para criar processos em linguagem C. Não é necessário nenhum argumento e o valor de retorno é o identificador (ID) do processo criado.
O propósito de fork() é criar um novo processo que se torna ”filho” do processo que o chamou e após a criação do processo, o processo “pai” e “filho” irão executar a próxima instrução após a chamada de fork().
A chamada de sistema fork() faz uma cópia exata do espaço de endereçamento do processo “pai” para o processo “filho”, ou seja, os processos possuem espaços de endereços separados, fazendo com que alterações no processo “pai” não tenham repercussão no processo “filho” e vice-versa.
O programa abaixo cria um processo “pai” e um processo “filho” com a chamada de sistema fork().
Programa 01 – Criação de processo ”pai” e processo “filho”
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#define MAX_COUNT 200
#define BUF_SIZE 100
void main(void)
{
pid_t pid;
int i;
char buf[BUF_SIZE];
fork();
pid = getpid();
for (i = 1; i <= MAX_COUNT; i++) {
sprintf(buf, "PID = %d, valor = %d\n", pid, i);
write(1, buf, strlen(buf));
}
exit(0);
}
Após a chamada de fork() no programa acima, o sistema terá 02 (dois) processos em execução.
Figura 01 – Criação de 2 processos com fork().
O programa abaixo cria os mesmos processos acima, mas faz distinção na utilização de 02 (duas) funções para cada um deles.
Programa 02 - Criação de processo ”pai” e processo “filho” com funções separadas.
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#define MAX_COUNT 200
void ChildProcess(void);
void ParentProcess(void);
void main(void) {
pid_t pid;
pid = fork();
if (pid == 0)
ChildProcess();
else
ParentProcess();
exit(0);
}
void ChildProcess(void) {
int i;
for (i = 1; i <= MAX_COUNT; i++)
printf(" Processo FILHO, valor = %d\n", i);
printf(" *** Processo FILHO
...