【问题标题】:Why getppid and getpid return the same value为什么 getppid 和 getpid 返回相同的值
【发布时间】:2011-09-28 11:36:46
【问题描述】:
/*  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

【问题讨论】:

    标签: c linux ubuntu-10.04


    【解决方案1】:

    嗯,因为在 child 内部调用getppid 会返回 child 的 parent-pid。 在 parent 中调用 getpid,它会返回 parent 的(自己的)pid。

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

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

    【讨论】:

      猜你喜欢
      • 2013-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多