Ir ao conteúdo

Posts recomendados

Postado
O código para a separação do processo pai do filho é:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int main(void)
{
    int i;
    pid_t pid;

    if ((pid = fork()) < 0)
    {
        perror("fork");
        exit(1);
    }
    if (pid == 0)
    {
        //O código aqui dentro será executado no processo filho
        printf("pid do Filho: %d\n", getpid());
    }
    else
    {
        //O código neste trecho será executado no processo pai
        printf("pid do Pai: %d\n", getpid());
    }


    printf("Esta regiao sera executada por ambos processos\n\n");
    scanf("%d", &i);
    exit(0);
}
                           
                           Vamos fazer um experimento simples, declarar inicialmente uma variável do tipo char e iniciar ela com o valor 'a'.

Então, no processo pai mudamo essa variável para armazenar 'b'.
Vamos exibir, em ambos processos, o valor da variável e seu endereço de memória.

Nosso código fica:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int main(void)
{
    int i;
    char c = 'a';
    pid_t pid;

    if ((pid = fork()) < 0)
    {
        perror("fork");
        exit(1);
    }
    if (pid == 0)
    {
        printf("Caractere e Endereco: %c - %p (filho)\n",c,&c);
    }
    else
    {
        c='b';
        printf("Caractere e Endereco: %c - %p (pai)\n",c,&c);
    }

    scanf("%d", &i);
    exit(0);
}

A função execv() é usada para executar um programa, em ambientes Linux.
Ou seja, ela cria um processo novo, que é o programa que vai executar.

Para ver a execv em ação, vamos criar um programa simples, de nome "teste" que simplesmente exibe a PID desse arquivo "teste", que é um executável, cujo código fonte é:

#include <sys/types.h>
#include <unistd.h>

int main(void)
{
    printf("\nPid do arquivo: %d\n", getpid());
  
  Agora, nosso programa, que usa a função execv para executar o arquivo "teste":

#include <stdio.h>

int main(void)
{
    printf("pid do Pai: %d\n", getpid());
    execv("teste", NULL);
    printf("EU TENHO UM SEGREDO PRA CONTAR\n");
  
  Assim como a função execv, a função system também executa um programa, na verdade ela simula o terminal, então é como se déssemos um comando no terminal.
A diferença é que aqui a função filho não mata a pai, portanto, não há crimes ;)

Vamos usar a função system para executar o mesmo arquivo "teste", isso é feito no terminal assim ./teste

Logo, nosso código fica:

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

int main(void)
{
    printf("pid do Pai: %d\n", getpid());
    system("./teste");
    printf("\nPrograma apos a funcao system\n");
}

Utilizando a linguagem C e o sistema operacional GNU/LINUX, desenvolva um
programa que crie um novo processo. Esse novo processo deverá alterar a sua imagem
de execução, via chamada ao sistema execve() ou uma de suas variações, inserindo a
imagem do comando /bin/ls, utilizando os parâmetros -lha --color.

 

O professor da disciplina de Sistemas Operacionais pediu que usamos threads. Nunca programei usando essas operações, nem sei pra onde vou, peço ajuda na solução desse programa.

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!