持续更新~
fork
作用:复制父进程的资源,创建子进程。父子进程的数据、堆栈段相同,代码段共享。
这句话讲的是子进程的数据和代码运行情况,子进程会带着父进程直到fork处的所有变量的值,继续执行fork后的代码。
就像鸣人的影分身,被人砍了一刀之后发现一个人干不过对方,
于是使用fork影分身,分身被召唤时说“是兄弟就来砍我”,于是分身就带着被砍的一刀出现了,(父子进程的数据、堆栈段相同)
之后鸣人和分身一起搓丸子,(代码段共享,执行的代码相同)
分身在左,鸣人在右,(通过if(fork){……}将父子进程需要执行的代码进行区分)
搓完丸子后,分身被砍死,鸣人带着丸子干死敌人,鸣人胜利了。(实际上父子进程的运行顺序并不一定,结束顺序也不一定,通常子进程先运行先结束)
纯属扯淡,看看就行~~
返回值类型:pid_t,相当于int,
pid_t类型变量初始化时值为0。
返回值:fork调用一次,返回两次,返回值有三种。
fork在调用的两个进程中都会有返回值,即父进程调用fork一次,父子进程都有返回值,
而返回值可能的取值有三种,正数(父进程中的返回值,等于子进程的pid)、0(子进程中的返回值)、负数(error,没出现过这种情况)
可以将父子进程当成链表,旧结点使用fork在链尾增加结点,并返回新增节点的序号,由于新增节点没有继续fork,则会返回0。
总结,fork的神奇之处在于返回值和功能(好像函数也就这两点比较重要吧)
getpid
返回值:返回当前进程的pid,
这里的返回值需要和fork返回值进行区分,fork父进程返回的是被创建的子进程的pid,子进程返回0。