Skip to content
guomu520 edited this page Feb 16, 2016 · 1 revision

pcntl_fork工作原理 当前进程在fork之后会复制一个与父进程完全相同的子进程,这2个进程共享代码空间,但是数据空间是互相独立的,子进程数据空间中的内容是“fork时”父进程的完整拷贝,指令指针也完全相同,但只有一点不同,如果fork成功,子进程中fork的返回值 是0,父进程中fork的返回值是子进程的进程号,如果fork不成功,父进程会返回错误。 fork前父进程的东西子进程可以继承,而在fork后子进程没有任何和父进程的继承关系了。在子进程里创建的东西是子进程的,在父进程创建的东西是父进程的。可以完全看成两个进程。 总结三点 1.派生子进程的进程,即父进程,其pid不变; 2.对子进程来说,fork返回给它0,但它的pid绝对不会是0;之所以fork返回0给它,是因为它随时可以调用getpid()来获取自己的pid; 3.fork之后父子进程除非采用了同步手段,否则不能确定谁先运行,也不能确定谁先结束,父子进程之间相互独立;

Clone this wiki locally