我正在尝试创建一个使用fork()来创建新进程的程序 . 示例输出应如下所示:
这是子进程 . 我的pid是733,我父母的id是772 .
这是父进程 . 我的pid是772,我孩子的id是773 .
这就是我编写程序的方式:
#include <stdio.h>
#include <stdlib.h>
int main() {
printf("This is the child process. My pid is %d and my parent's id is %d.\n", getpid(), fork());
return 0;
}
这导致输出:
这是子进程 . 我的pid是22163,我父母的id是0 .
这是子进程 . 我的pid是22162,我父母的id是22163 .
为什么它会两次打印语句?如何在第一句中显示子ID后如何正确显示父语句?
编辑:
#include <stdio.h>
#include <stdlib.h>
int main() {
int pid = fork();
if (pid == 0) {
printf("This is the child process. My pid is %d and my parent's id is %d.\n", getpid(), getppid());
}
else {
printf("This is the parent process. My pid is %d and my parent's id is %d.\n", getpid(), pid);
}
return 0;
}
5 回答
它正在打印语句两次,因为它正在为父项和子项打印它 . 父级的父ID为0
尝试这样的事情:
它打印两次是因为你正在调用printf两次,一次是在你的程序执行中,一次是在fork中 . 尝试从printf调用中取出fork() .
首先阅读fork man page以及getppid / getpid手册页 .
从叉子
所以这应该是一些事情
至于你的问题:
fork()
在printf
之前执行 . 因此,当它完成时,您有两个具有相同指令的进程 . 因此,printf将执行两次 . 对fork()
的调用将返回0
到子进程,子进程的pid
将返回到父进程 .您将获得两个正在运行的进程,每个进程都将执行此指令语句:
和
〜
要包装它,上面的行是子,指定它的
pid
. 第二行是父进程,指定其id(22162)及其子(22163) .这是获取正确输出的正确方法....但是,childs parent id有时可能打印为1,因为父进程终止,而pid = 1的根进程控制此孤立进程 .
我们通过if,else语句控制fork()进程调用 . 请参阅下面的代码: