2023年8月2日发(作者:)
浅谈⽗⼦进程通过Linux启动过程可以得知,所有进程都是init进程直接或者间接的fork出来的.⾸先咱们来看看怎么创建⼦进程:头⽂件 #include
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函数创建⼦进程.------------------------------------------------------------------------------------------------⼀些其他的相关函数:头⽂件
发布者:admin,转转请注明出处:http://www.yc00.com/news/1690956995a472669.html
评论列表(0条)