You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何同一Shell中多次执行echo $$与自定义PPID程序结果一致?

为什么多次执行程序返回的父进程ID(PPID)和Shell的PID相同?

你的代码如下:

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
/**
 * main - PPID
 *
 * Return: Always 0
 */
int main(void)
{
        pid_t my_ppid;

        my_ppid = getppid();
        printf("%u\n", my_ppid);
        return (0);
}

原因很直接:

  • 当你在Shell里执行./myppid这类外部命令时,Shell会先通过fork()创建一个子进程,再在这个子进程里用exec()替换成你的程序运行。所以你的程序的父进程就是当前的Shell进程。
  • echo $$输出的就是当前Shell进程的PID,只要你不关闭这个Shell窗口,这个Shell进程就会一直存在,PID也不会改变。因此不管你多少次执行./myppid,它的父进程始终是这个固定的Shell进程,返回的PPID自然和$$的输出完全一致。

内容的提问来源于stack exchange,提问作者greez'

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 19:04:08