先贴代码,如下:
#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 时,父进程已经退出了