打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
fork()后exit(0)
fork()后,子进程复制了父进程的代码段,数据段和堆栈段。以前,我一直以为代码段是从头复制到fork()函数处,再加上if(pid == 0){}的代码段,后来用到了fork()函数,发现我错了。fork()后,子进程将父进程的全部代码段,包括fork()以后的代码段全部复制了。
测试程序:
#include
int main()
{
   int pid;
   if((pid = fork()) < 0)
   {
       perror("fork()\n");
   }
   else if(0 == pid)
   {
      printf("child process\n");
   }
   else if(pid > 0)
   {
      printf("parent process\n");
   }
 
  printf("child or parent?\n");       //这句话会打印几遍?
   return 0;
    }
 
上面的程序中child or parent?会打印两遍,这就说明子进程复制了父进程的全部代码段。另外shell提示符只打印一次,由于父子进程执行的先后顺序,shell提示符打印有错乱的感觉,自己试一下。可能会出现这样的情况:父进程执行完以后,打印shell提示符,然后在执行子进程。
   我们大多数的想法是子进程只执行if(0 ==pid){}的代码段,以后的代码段子进程不执行,为了达到这个目的,在if(0 ==pid){}代码段的最后加上exit(0),记住不可以家return0 ,return 0 只是退出一个函数,可能碰巧是主函数,也有可能是子函数。所以用exit(0)结束本进程。
 
 
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
【Linux】进程创建(fork函数)及其等待与退出
Linux系统编程之waitpid函数详解_linux waitpid
浅析fork()和底层实现
linux中创建多个子进程的方法
Linux进程学习总结 fork()和vfork()的学习
Linux创建进程达到65535
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服