日期:2014-05-16  浏览次数:20683 次

创建进程的系统调用clone()和fork()
fork()依据返回值的不同来区分是父进程返回还是子进程返回
clone()依据返回时的堆栈指针来区分是父进程返回还是子进程返回

为什么“依据返回时的堆栈指针来区分”的方法内对内核线程才适用?
为什么clone()可以使用这种方法?clone()创建的一定是内核线程吗?

------解决方案--------------------
系统调用clone 确实能创建用户线程

但是原作者针对那句话的例子是thread_create ,这个只能创建内核线程
------解决方案--------------------
clone用于创建轻量级进程,即创建的子进程与父进程共用线性地址空间,只是他们的堆栈不同而已(进程ID应该也不同),linux 2.4用户线程就是基于此实现的。
fork创建的子进程与父进程使用的不同的线性地址空间,是完全的进程概念。