Académique Documents
Professionnel Documents
Culture Documents
RA 0030481721004
10) O que identifica um processo é o seu PID, ou seja, seu process indetifier.
Este identificador corresponde a um valor inteiro que irá informar o número do
processo que está sendo executado ou manipulado, ou seja, qual o processo está
sendo manipulado.
Exemplo:
11) A primitiva fork() é uma chamada de sistema, ou seja, uma chamada ao
sistema operacional para que dentro de um processo provoque a criação de um
clone perfeito (tendo as mesmas variáveis, registros, descritores de arquivo, e
entre outros) deste mesmo processo para execução; assim os processos pai
(processo copiado) e filho (processo criado) possuem o mesmo código.
13) A primitiva exit() é a única que não retorna valor, pois todos os descritores
de arquivos abertos são automaticamente fechados.
Já, se status é não nulo (NULL), tanto a primitiva wait() quanto waitpid()
(abordada mais a frente) armazena a informação relativa a razão da morte do
processo filho, sendo apontada pelo ponteiro status. Este valor pode ser avaliado
com diversas macros que são listadas com o comando shell man 2 wait. O código
de retorno via status indica a morte do processo que pode ser devido:
Uma chamada exit(), e neste caso, o byte a direita de status vale 0, e o byte a
esquerda é o parâmetro passado a exit() pelo filho;
Uma recepção de um sinal fatal, e neste caso, o byte a direita de status é não
nulo. Os sete primeiros bits deste byte contêm o número do sinal que matou o
filho.
Exemplo:
16) O comando fork() cria uma cópia idêntica ao seu processo pai retornando
o pid do processo criado enquanto a família de chamadas de sistema exec() ()
permitem o lançamento da execução de um programa externo ao processo. Não
existe a criação efetiva de um novo processo, mas simplesmente uma substituição
do programa de execução, ou seja, possui a capacidade de substituir
completamente a imagem de um processo vigente por uma nova imagem (sendo
que este arquivo executável pode ser tanto um arquivo binário quanto um script)
e em caso de sucesso, não há retorno desta chamada de sistema, isto devido à
substituição da imagem do processo. Já em casos de erro, a função retorna -1 e
a variável global errno (contida na biblioteca errno.h) é sinalizada de acordo com
a causa do erro.
18) Não, a sequência de pid pode ser aleatória; isto porque o tempo de
resposta da criação de um filho pode variar gerando números de pid variados.
23) O comando wait() faz com que o processo pai espere a finalização do
processo filho para que continue sua execução comum. Geralmente o retorno
desta função é o número do pid do processo filho ou, em caso de erro, o retorno
é igual a -1.
24) A variável status, neste código serve para sabermos se o processo filho
encerrou suas atividades ok, isto porque, a variável armazena o retorno da
primitiva wait() (sendo 0 para ok e -1 para erro), o que pode ser testados nas linhas
de 35 à 42.
25) Não, o comando execl() é executado apenas uma vez pelo processo filho,
pois esta linha de código se encontra dentro do escopo, ou seja, área de execução
do processo filho e não a uma área comum de execução a todos os processos.