先贴代码,如下:
#include <stdio.h> #include <sys/types.h> #include <unistd.h> int main(){ pid_t pid = fork(); if(pid == 0){ printf("This message from new.\t"); printf("My PID is: %d\t", getpid()); printf("My ppid is: %d\n", getppid()); }else{ printf("This message from old.\t"); printf("This new proccess" PID is: %d\t", pid); printf("My PID is: %d\n", getpid()); } }
编译以后运行结果:
[root@localhost proccess]# ./a.out This message from old. This new proccess" PID is: 2155 My PID is: 2154 This message from new. My PID is: 2155 My ppid is: 1 [root@localhost proccess]# ./a.out This message from old. This new proccess" PID is: 2157 My PID is: 2156 This message from new. My PID is: 2157 My ppid is: 1 [root@localhost proccess]# ./a.out This message from old. This new proccess" PID is: 2159 My PID is: 2158 This message from new. My PID is: 2159 My ppid is: 1 [root@localhost proccess]# ./a.out This message from old. This new proccess" PID is: 2161 My PID is: 2160 This message from new. My PID is: 2161 My ppid is: 2160 [root@localhost proccess]# ./a.out This message from old. This new proccess" PID is: 2163 My PID is: 2162 This message from new. My PID is: 2163 My ppid is: 2162 [root@localhost proccess]# ./a.out This message from old. This new proccess" PID is: 2165 My PID is: 2164 This message from new. My PID is: 2165 My ppid is: 1 [root@localhost proccess]# ./a.out This message from old. This new proccess" PID is: 2167 My PID is: 2166 This message from new. My PID is: 2167 My ppid is: 2166 [root@localhost proccess]# ./a.out This message from old. This new proccess" PID is: 2169 My PID is: 2168 This message from new. My PID is: 2169 My ppid is: 1 [root@localhost proccess]# ./a.out This message from old. This new proccess" PID is: 2171 My PID is: 2170 This message from new. My PID is: 2171 My ppid is: 1
我们可以通过结果看到。很多时候克隆出来的进程在调用getppid获取父进程ID的时候,得到的是1,而不是调用fork的进程的ID。有时候又是调用fork的进程的ID。这是怎么一回事儿呢?
解决方案
20
http://stackoverflow.com/questions/16078188/why-getppid-from-the-child-return-1
在子进程调用 getppid 时,父进程已经退出了
在子进程调用 getppid 时,父进程已经退出了