为什么getppid和getpid返回相同的值

时间:2011-07-05 02:31:38

标签: c linux ubuntu-10.04

/*  In alarm.c, the first function, ding, simulates an alarm clock.  */

#include <signal.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

static int alarm_fired = 0;

void ding(int sig)
{
    alarm_fired = 1;
}

/*  In main, we tell the child process to wait for five seconds
    before sending a SIGALRM signal to its parent.  */

int main()
{
    pid_t pid;

    printf("alarm application starting\n");

    pid = fork();
    switch(pid) {
    case -1:
      /* Failure */
      perror("fork failed");
      exit(1);
    case 0:
      /* child */
        sleep(5);
        printf("getppid: %d\n", getppid()); // Question: why this line produces the same value as getpid?
        kill(getppid(), SIGALRM);
        exit(0);
    }

/*  The parent process arranges to catch SIGALRM with a call to signal
    and then waits for the inevitable.  */

    printf("waiting for alarm to go off\n");
    (void) signal(SIGALRM, ding);

    printf("pid: %d\n", getpid()); // Question: why this line produces the same value as getppid?
    pause();
    if (alarm_fired)
        printf("Ding!\n");

    printf("done\n");
    exit(0);
}

我在Ubuntu 10.04 LTS下运行了上面的代码

> user@ubuntu:~/Documents/./alarm
> alarm application starting
> waiting for alarm to go off
> pid: 3055
> getppid: 3055
> Ding!
> done

1 个答案:

答案 0 :(得分:10)

嗯,因为在孩子内部,你打电话给getppid,它会返回孩子的父亲

。 在内,您调用getpid,返回父级(自己)的pid

从子级调用getppid(获取父级pid)与从父级调用getpid相同。

所以价值是一样的。这不是直截了当的预期吗?