只是与子进程块中的父 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=%d\n",getpid(),getppid());
}
else{
printf("pid in parent=%d and childid=%d\n",getpid(),pid);
}
exit(EXIT_SUCCESS);
}
输出:
父进程中的 pid=2642 和子进程 ID=2643
子进程中的pid=2643,父进程=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=%d\n",getpid(),getppid());
}
else{
printf("pid in parent=%d and childid=%d\n",getpid(),pid);
}
int status = -1;
waitpid(pid, &status, WEXITED);
printf("The child exited with return code %d\n", status);
exit(EXIT_SUCCESS);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)