子进程和父进程ID
发布时间:2020-12-16 05:05:53 所属栏目:百科 来源:网络整理
导读:刚刚与子进程块中的父pid值混淆.我的计划如下: int main(int argc,char *argv[]) { pid_t pid; pid=fork(); if(pid==-1){ perror("fork failure"); exit(EXIT_FAILURE); } else if(pid==0){ printf("pid in child=%d and parent=%dn",getpid(),getppid());
刚刚与子进程块中的父pid值混淆.我的计划如下:
int main(int argc,char *argv[]) { pid_t pid; pid=fork(); if(pid==-1){ perror("fork failure"); exit(EXIT_FAILURE); } else if(pid==0){ printf("pid in child=%d and parent=%dn",getpid(),getppid()); } else{ printf("pid in parent=%d and childid=%dn",pid); } exit(EXIT_SUCCESS); } 输出: pid in child = 2643,parent = 1 在“高级Unix编程”中,它表示子进程可以使用getppid()函数获取父进程id.但在这里我得到“1”,这是“init”进程ID. 如何在子进程块中获取父pid值..请帮助我获取输出. 我在“Linux Mint OS”中执行但在“WindRiver”操作系统中我没有遇到这个问题.该程序是否根据操作系统改变行为? 解决方法
那是因为父亲可以/将在儿子面前退出.如果父亲在没有请求其子项的返回值的情况下存在,则该子进程将由pid = 1拥有.什么是经典的UNIX或GNU系统SystemV init.
解决方案是在父亲中使用waitpid(): int main(int argc,char *argv[]) { pid_t pid; pid=fork(); if(pid==-1){ perror("fork failure"); exit(EXIT_FAILURE); } else if(pid==0){ printf("pid in child=%d and parent=%dn",getppid()); } else{ printf("pid in parent=%d and childid=%dn",pid); } int status = -1; waitpid(pid,&status,WEXITED); printf("The child exited with return code %dn",status); exit(EXIT_SUCCESS); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |