当前位置: 技术问答>linux和unix
求助关于getpid(),getppid()的问题
来源: 互联网 发布时间:2017-05-02
本文导语: 1 #include 2 #include 3 #include 4 5 int main() 6 { 7 pid_t id; 8 id=fork(); 9 if(id == -1) 10 { 11 perror("fujinchengdiaoyongshibai"); 12 } 13 if(id == 0) 14 { 15 printf("c...
1 #include
2 #include
3 #include
4
5 int main()
6 {
7 pid_t id;
8 id=fork();
9 if(id == -1)
10 {
11 perror("fujinchengdiaoyongshibai");
12 }
13 if(id == 0)
14 {
15 printf("child process id is %d,the father id is %d n",getpid(),getppid());
16 }
17
18 if(id > 0)
19 {
20 printf("father process id is %d,the father father id is%dn",getpid(),getppid());
21 }
22 // printf("PID = %dn",getpid());
23 // printf("PPID = %dn",getppid());
为什么我得到的结果是呢?
father process id is 2531,the father father id is2335
child process id is 2532,the father id is 1
父进程是2531,但是在子进程中得到的父进程却是1,按道理应该相等的,为什么不相等呢?
|
因为用fork函数创建子进程,父进程没有等待子进程的退出,这可能导致子进程编程孤儿进程,被init进程接管,所以父进程id为1
|
你可以采用vfork(),这样父进程会等待子进程退出,自身才会退出。上面的情况,是父进程先退出,子进程失去父进程,被init 1 进程(所有进程的父进程)收养
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。