浅谈父子进程

浅谈父子进程

2023年8月2日发(作者:)

浅谈⽗⼦进程通过Linux启动过程可以得知,所有进程都是init进程直接或者间接的fork出来的.⾸先咱们来看看怎么创建⼦进程:头⽂件 #include int fork(void);    //创建⼀个⼦进程(开辟和⽗进程相同空间)返回值:-1失败,成功返回创建的⼦进程的Idint vfork(void);   //创建⼀个⼦进程(共享⽗进程资源空间)返回值:-1失败,成功返回创建的⼦进程的Id

1. int pid = fork();2. int c = 0;3. if(pid == 0){   //返回值在⼦进程中为0;所以当等于0时就是在⼦进程中运⾏4. c++;5. printf("children,c=%dn",c);6. }else if(pid > 0){ //返回值在⽗进程中就是⼦进程的PID号,所以⼤于0就是在⽗进程中执⾏7. c++;8. printf("father,c=%dn",c);9. }else { //⼩于0,⼦进程创建失败10. printf("⼦进程创建失败n");11. }结果为:children,c=1    father,c=1因为是拷贝⽗进程的资源,所以变量c也被拷贝了⼀份到⼦进程,所以在⽗⼦进程中对变量c进⾏操作不会相互影响,⽽且⽗⼦进程谁先执⾏谁后执⾏由系统进程调度决定,⽽使⽤vfork()函数则会共享,⽽且需要注意的是vfork函数产⽣的⼦进程会被优先调度,⽗进程会等⼦进程运⾏结束以后才会被调⽤,⽽且⼦进程结束以后必须调⽤exit函数返回,否则进程异常退出.1. int c = 0;2. int pid = vfork();3. if(pid == 0){4. c++;5. printf("c c=%dn",c);6. exit(0);      //调⽤该函数返回7. }8. if(pid > 0){9. c++;10. printf("f c=%dn",c);11. }12. if(pid < 0){13. printf("⼦进程创建失败n");14. }运⾏结果为:c c=2;      f c=3;vfork函数使得⽗进程等待⼦进程完成⼯作后调⽤可以防⽌⼦进程成为僵⼫进程,⽽且节约内存空间,所以在满⾜需求的情况下可以尽量选择vfork函数创建⼦进程.------------------------------------------------------------------------------------------------⼀些其他的相关函数:头⽂件,int getpid(void);//得到进程Idint getppid(void);//得到⽗进程Id头⽂件int wait(int *status);//暂停⽬前进程的执⾏,直到有信号来激活或者⼦进程执⾏结束int waitpid(int pid,int *status,int options);//等待pid代表的⼦进程的执⾏结束,pid = -1,相当于wait。等待任何⼦进程头⽂件unsigned int sleep(unsigned int seconds)//当前进程休眠头⽂件void exit(int status);//结束进程,更新缓存区oid _exit(int status);//结束进程,清空缓存区

发布者:admin,转转请注明出处:http://www.yc00.com/news/1690956995a472669.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信