linux fork()笔记

来源:互联网 发布:java 密码加密解密 编辑:程序博客网 时间:2024/06/04 19:31
源代码,通过输出测试fork()如何创建一个新的进程;
int main(int argc, char const *argv[]){  pid_t pid =1;  static int a=1;  pid = fork();  std::cout<<"a:"<<a<<"pid:"<<pid<<std::endl;  a++;  pid = fork();  std::cout<<"a:"<<a<<"pid:"<<pid<<std::endl;  a++;  pid = fork();  std::cout<<"a:"<<a<<"pid:"<<pid<<std::endl;  std::cout<<"getpid"<<getpid()<<std::endl;  std::cout<<std::endl;  return 0;}

输出结果如下:

a:1pid:22210a:2pid:22211a:3pid:22212getpid22209a:3pid:0getpid22212a:2pid:0a:3pid:22213getpid22211a:1pid:0a:2pid:22214a:3pid:22215getpid22210a:3pid:0getpid22213a:3pid:0getpid22215a:2pid:0a:3pid:22216getpid22214a:3pid:0getpid22216

通过输出我们可以得出以下结论:

1、运行到fork()时候系统并不会中断当前进程去创建新的进程,而是将fork()缓存起来等当前进程执行完毕后,按照先进后出的原则创建新的进程(类似于栈)。

2、fork()函数创建的进程并不是从头开始执行,而是从接着fork()函数后继续执行,也就是从fork()之后的下一条语句继续执行。


因此在写很多fork()循环调用时候需要注意考虑fork()的嵌套关系。




0 0
原创粉丝点击