为何同一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'
相关产品推荐
相关产品推荐

