一、fork
1. 调用方法 #include <sys/types.h> #include <unistd.h>
pid_t fork(void);
正确返回:在父进程中返回子进程的进程号,在子进程中返回0 错误返回:-1
子进程是父进程的一个拷贝。即,子进程从父进程得到了数据段和堆栈段的拷贝,这些需要分配新的内存;而对于只读的代码段,通常使用共享内存的方式访问。fork返回后,子进程和父进程都从调用fork函数的下一条语句开始执行。
父进程与子进程的不同之处在于:fork的返回值不同——父进程中的返回值为子进程的进程号,而子进程为0 2. fork函数调用的用途 ⑴ 一个进程希望复制自身,从而父子进程能同时执行不同段的代码。 ⑵ 进程想执行另外一个程序 |
题目:请问下面的程序一共输出多少个“-”?
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(void)
{
inti;
for(i=0; i<2; i++){
fork();
printf("-");
}
return0;
}
如果你对fork()的机制比较熟悉的话,这个题并不难,输出应该是6个“-”,但是,实际上这个程序会很tricky地输出8个“-”。关于本题的详细讲解,请参考这篇文章:一个fork的面试题
更多相关详细信息,请参阅此贴:关于fork()函数的工作机制
另外附上:多线程和多进程的区别(小结)