Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Próxima revisão
Revisão anterior
Última revisão Ambos lados da revisão seguinte
fork [d/mY H:i]
laureano criada
fork [d/mY H:i]
laureano
Linha 1: Linha 1:
-A função fork é uma função que duplica o processo atual dentro do sistema operacional. O processo que inicialmente chamou a função fork é chamado de processo pai. O novo processo criado pela função fork é chamado de processo filho. Todas as áreas do processo são duplicadas dentro do sistema operacional (código, dados, pilha, memória dinâmica). ​Para maiores ​informações ​sobre funcionamento ​de processosrecomenda-se a leitura de um livro específico sobre assunto.+====== Função fork ====== 
 + 
 +Sintaxe: 
 + ''#​include <​unistd.h>''​ 
 + 
 + 
 +''​[[tipos_dados|pid_t]] fork([[tipos_dados|void]]);''​ 
 + 
 +---- 
 + 
 +A função ​''​fork'' ​é uma função que duplica o processo atual dentro do sistema operacional. O processo que inicialmente chamou a função ​''​fork'' ​é chamado de **processo pai**. O novo processo criado pela função ​''​fork'' ​é chamado de **processo filho**. Todas as áreas do processo são duplicadas dentro do sistema operacional (código, dados, pilha, memória dinâmica). ​ 
 + 
 +A função **fork** é chamada uma única vez (no pai) e retorna duas vezes (uma no processo pai e outra no processo filho). O processo filho herda informações ​do processo pai: 
 + 
 +  * Usuários (user id) Real, efetivo. 
 +  * Grupos (group id) Real, efetivo. 
 +  * Variáveis ​de ambiente. 
 +  * Descritores de arquivos. 
 +  * Prioridade  
 +  * Todos os segmentos de memória compartilhada assinalados. 
 +  * Diretório corrente de trabalho. 
 +  * Diretório Raiz. 
 +  * Máscara de criação de arquivos. 
 + 
 +O processo filho possui as seguinte informações diferente do processo pai: 
 +  * PID único dentro do sistema. 
 +  * Um PPID diferente. (O PPID do processo filho é o PID do processo pai que inicialmente ativou a função fork). 
 +  * O conjunto de sinais pendentes para o processo é inicializado como estando vazio. 
 +  * Locks de processocódigo e dados não são herdados pelo processo filho. 
 +  * Os valores da contabilização do processo obtida pela função time são inicializados com zero. 
 +  * Todos os sinais de tempo são desligados. 
 + 
 +Caso a função fork retorne 0 (zero), está se executando o processo filho. Caso função retorne ​um valor diferente de 0 (zero), mas positivo, ​processo pai está sendo executadoO valor retornado representa o PID do processo filho criado. ​ A função retorna -1 em caso de erro (provavelmente devido a se ter atingido o limite máximo de processos por usuário configurado no sistema). 
 + 
 +<code c> 
 +#include <​stdio.h>​ 
 +#include <​stdlib.h>​ 
 +#include <​errno.h>​ 
 +#include <​unistd.h>​ 
 + 
 +int main(int argc, char  *argv[]) 
 +
 +   pid_t iPid; 
 + 
 +   ​printf("​\nDuplicando o processo\n"​);​ 
 + 
 +   iPid = fork(); 
 +   if (iPid < 0) 
 +   { 
 +      perror(argv[0]);​ 
 +      exit(errno);​ 
 +   } 
 + 
 +   ​if(iPid != 0) 
 +   { 
 +      /* este trecho de código será executado apenas no pai */ 
 +      printf("​\nCodigo executado no processo pai\n"​);​ 
 +      printf("​\nPAI -Processo pai.  PID:​|%d|\n",​ getpid());​ 
 +      printf("​\nPAI -Processo filho.PID:​|%d|\n",​ iPid); 
 +   } 
 +   ​else 
 +   { 
 +      printf("​\nCódigo executado pelo filho"​);​ 
 +   } 
 + 
 +   /* este trecho de código será executado apenas no filho, embora o comando if esteja disponível também para o pai */ 
 +   ​if(iPid == 0) 
 +   { 
 +      printf("​\nCodigo executado no processo filho\n"​);​ 
 +      printf("​\nFILHO-Processo pai.  PID:​|%d|\n",​getppid());​ 
 +      printf("​\nFILHO-Processo filho.PID:​|%d|\n",​getpid());​ 
 +   } 
 +   ​else 
 +   { 
 +      printf("​\nCódigo executado pelo pai"​);​ 
 +   } 
 + 
 +   /* este código está disponível no pai e no filho */ 
 +   ​printf("​\nEste mensagem será impressa 2 vezes"​);​ 
 +   ​return 0; 
 +
 +</​code>​ 
 + 
  
fork.txt · Última modificação: d/mY H:i por laureano
CC Attribution-Noncommercial-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0