Id do processo pai inesperado na saída

3

Meu código está bifurcando um processo e imprimindo cada processo 'PID e PPID. Eu esperava que o PPID da criança fosse o mesmo que o PID dos pais, mas não está chegando como tal.

Estou usando o Ubuntu 14.04.

#include <stdio.h>
#include <sys/wait.h>

int main(){
    int pid;
    pid = fork();
    if(pid==0){
        printf("\nI am the child and my parent id is %d and my id %d\n", getppid(), getpid());
    }
    else
        printf("\nI am the parent and my pid is %d and my parent id is %d\n", getpid(), getppid());

    return 0;
}

Aqui está a saída que estou recebendo:

I am the parent and my pid is 29229 and my parent id is 27087
I am the child and my parent id is 1135 and my id is 29230
    
por Beginner 01.10.2016 / 22:37

1 resposta

5

Meu palpite é: o pai retornou antes do filho, que se tornou órfão. O PID 1135 deve ser o processo de inicialização do usuário, que se tornou o novo pai do processo. (existem 2 sub-argumentos em uma sessão de usuário do Ubuntu).

$ ps -ef | grep init
you    1135    ...    init --user

Se você quiser que seu pai aguarde seu filho, use wait . Você realmente tem o include :

#include <stdio.h>
#include <sys/wait.h>

int main(){
    int pid;
    pid = fork();
    if(pid == 0)
        printf("\nI am the child and my parent id is - %d and mine id %d\n",getppid(),getpid());
    else{
       printf("\nI am the parent and my pid is %d and my parent id is %d\n",getpid(),getppid());
       wait(NULL);
    }
    return 0;
}

Isso garantirá que o pai não saia antes do printf da criança. Você pode ver esse comportamento mais claramente, inserindo algumas sleep() chamadas aqui e ali para ver em que ordem as coisas ocorrem.

Para mais informações sobre subpastores, dê uma olhada aqui .

    
por 01.10.2016 / 22:44