linux进程和线程的clone创建



linux进程和线程的clone创建
 
Java代码   www.2cto.com  
[b]Linux下进程和线程的创建都是通过clone实现的. clone函数功能强大,带了众多参数,  
clone可以让你有选择性的继承父进程的资源,你可以选择想vfork一样和父进程  
共享一个虚存空间,从而创造的是线程,你也可以不和父进程共享,你甚至可以选  
择创造出来的进程和父进程不再是父子关系,而是 兄弟关系[/b]  
 
pthread_create是基于clone实现的, 创建出来的其实是进程, 但这些进程与父进程共享很多东西, 
共享的东西都不用复制给子进程, 从而节省很多开销, 因此,这些子进程也叫轻量级进程(light-weight process) 
 
在linux中线程就是轻量级的进程 
fork后, 子进程复制哪些东西 
一句话总结, 就是所有 writeable 的东西都会复制.包括: 
堆,栈, 数据段, 未初始化数据段, 打开的文件描述符, 
信号安装过的handler, 共享库, ipc(共享内存,消息队列,信号量) 
注意未决信号不会继承过来, 新进程会重置它的未决信号链  
子进程和父进程共享哪些东西 
一句话总结, 就是所有 read-only 的东西都不用复制, 父子进程共享, 包括: 
正文段和字符串常量  
哪些东西, 子进程不会从父进程继承 
进程id, 各种锁(内存锁,文件锁), 定时器, 未决信号  
 
在操作系统中。一个用户级的线程如果对应一个系统级线程,就可以充分利用linux多核的特性。 
但是在早期的linux版本中,linux用户级进程的多个线程对应一个系统级的进程,不能充分利用操作系统的特性!
 

相关内容

    暂无相关文章