Дочерний процесс возвращает неправильное значение - PullRequest
0 голосов
/ 13 октября 2018

Я хочу посмотреть, что будет getppid() возвращаемая функция, когда будет выполняться дочерний процесс.Я ввел sleep(10) для завершения родительского процесса.На самом деле я должен получить « CHILD: PID моего родителя - 1 \ n», потому что этот дочерний процесс должен иметь процесс init в качестве родителя, если родительский процесс не вызывает wait().Но я получаю PPID = 959 .Это не процесс инициализации.Этот PPID соответствует некоторой /sbin/upstart --user команде.

Это мой код:

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

int main(void) {
 int status;
 pid_t pid, ch_pid;

 switch(pid=fork()) {
 case -1:
    perror("Fork failed");
    exit(1);
  case  0:
    sleep(10);
    printf("\nCHILD: This is child process!\n");
    printf("CHILD: My PID is-- %d\n", getpid());
    printf("CHILD: My parent PID -- %d\n", getppid());
    //sleep(5);
    exit(0);
  default:
    //sleep(60); 
    /*Prohibit PP to execute*/
    printf("PARENT: This is parent process!\n");
    printf("PARENT: My PID -- %d\n", getpid());
    printf("PARENT: My child PID %d\n",pid);
    printf("PARENT: My parent PID %d\n",getppid());
    exit(0);
 }
    return 0;
}

Не обращайте внимания на комментарии.

...