c/c++语言开发共享fork()子进程和父进程

我正在尝试创建一个使用fork()来创建新进程的程序。 示例输出应如下所示:

这是子进程。 我的pid是733,我父母的id是772。
这是父进程。 我的pid是772,我孩子的id是773。

这就是我编写程序的方式:

#include  #include  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  #include  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; } 

    首先阅读fork手册页以及getppid / getpid手册页。

    从叉子

    成功时,子进程的PID在父进程的执行中返回,并在子进程的执行中返回0。 失败时,将在父上下文中返回-1,不会创建子进程,并且将正确设置errno。

    所以这应该是一些事情

     if ((pid=fork())==0){ printf("yada yada %u and yada yada %u",getpid(),getppid()); } else{ /* avoids error checking*/ printf("Dont yada yada me, im your parent with pid %u ", getpid()); } 

    至于你的问题:

    这是子进程。 我的pid是22163,我父母的id是0。

    这是子进程。 我的pid是22162,我父母的id是22163。

    fork()printf之前执行。 因此,当它完成时,您有两个具有相同指令的进程。 因此,printf将执行两次。 对fork()的调用将返回0到子进程,子进程的pid返回到父进程。

    您将获得两个正在运行的进程,每个进程都将执行此指令语句:

     printf ("... My pid is %d and my parent's id is %d",getpid(),0); 

     printf ("... My pid is %d and my parent's id is %d",getpid(),22163); 

    要包装它,上面的行是子,指定它的pid 。 第二行是父进程,指定其id(22162)及其子(22163)。

    它正在打印语句两次,因为它正在为父项和子项打印它。 父级的父ID为0

    尝试这样的事情:

      pid_t pid; 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(), getppid() ); 

    它打印两次是因为你正在调用printf两次,一次是在你的程序执行中,一次是在fork中。 尝试从printf调用中取出fork()。

    这是获取正确输出的正确方法….但是,childs parent id有时可能打印为1,因为父进程终止,而pid = 1的根进程控制此孤立进程。

      pid_t pid; 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); 

    我们通过if,else语句控制fork()进程调用。 请参阅下面的代码:

    需要了解更多c/c++开发分享fork()子进程和父进程,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!

     int main() { int forkresult, parent_ID; forkresult=fork(); if(forkresult !=0 ) { printf(" I am the parent my ID is = %d" , getpid()); printf(" and my child ID is = %dn" , forkresult); } parent_ID = getpid(); if(forkresult ==0) printf(" I am the child ID is = %d",getpid()); else printf(" and my parent ID is = %d", parent_ID); } 

      以上就是c/c++开发分享fork()子进程和父进程相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/980410.html

      (0)
      上一篇 2021年12月13日
      下一篇 2021年12月13日

      精彩推荐