关于linux c进程调用的问题
我在学习linux c的进程调用,遇到下面这个问题.
#include <sys/types.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> int main() { pid_t pid1, pid2, pid, ppid; char *message; pid1 = fork(); pid2 = fork(); // create three process ppid = getppid(); pid = getpid(); switch(pid1) { case -1: perror("first fork failed"); exit(1); case 0: // child 1 : p1 switch(pid2) { case -1: perror("second fork failed"); exit(1); case 0: // child 1'child : p3 printf("child 3, pid:%d, ppid:%d n", pid, ppid); break; default: // child 1 printf("child 1, pid:%d, ppid:%d n", pid, ppid); break; } break; default: switch(pid2) { case -1: perror("second fork failed"); exit(1); case 0: // child 2 printf("child 2, pid:%d, ppid:%d n", pid, ppid); break; default: // parent printf("parent , pid:%d, ppid:%d n", pid, ppid); break; } break; } return 0; }
也有可能是这样子:
但我觉得应该每次都类似这样子
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
恩恩, 后面发现了这个问题.谢谢
父进程早于fork出来的子进程结束,所以子进程将其ppid设置为init进程的pid
我是想 查看子进程的ppid,也就是父进程id,.但是我觉得子进程的ppid应该是parent的id,结果应该类似与第三幅图,child1 和child2的父进程id都是parent.但是前面两幅图片所显示的结果,打印出来的ppid却不是parent的id.而是2159(也就是init --user这个进程的id),所以我有点疑惑.
从你的预期看,你需要得到子进程号。而你的代码是要求子进程显示父进程号,而不是要求子进程返回子进程号
找到问题了,是因为父进程没有等待子进程结束.
子进程打印ppid的时候,有可能父进程已经结束,所以打印的ppid是init --user的pid.