linux fork多线程的问题

各位大师,我看fork函数,这个问题困扰了好久。请各位大师赐教。

既然replicated了other pthreads objects,为什么child process 只有 a single thread呢?
图片说明

图片中介绍来源: http://linux.die.net/man/2/fork

sorry, 第一次回答得不准确,重新解释下:
由fork()产生的子进程只带有一个控制线程,该线程实际上就是父进程中调用fork()函数的控制线程,而如果父进程中有多个线程的话,子进程实际上并不会把这些线程都继承过来。上述中的 other pthreads objects这里的意思其实并不是指线程,而是包含了 mutexes、condition variables等这些线程相关对象资源。也正是因为这个原因,所以在多线程中使用fork()是比较危险的,因为子进程只是继承了父进程中的多线程同步和锁等资源对象,但是并不会继承父进程中的多线程本身。不过由于现在系统都是 copy on write(写时复制),所以在子进程中如果执行 exec 不会造成因上述情况存在的死锁等问题。

a single thread 指的是内核级线程
other pthreads objects 指的是用户级线程

线程依附于进程之下,而各进程间是相互独立的。如果主线程关闭的话,那其子线程也会关闭,而主进程结束了,其子进程还在继续远行着。所以fork()一个子进程来运行一个简单功能,应该是为了当主进程关闭时,这个简单功能的子进程还可以继续运行。

Dennis_Zip 的解答,真的太好了。这个问题理解了。非常感谢。另外看到《Linux内核设计与实现 第3版》3.4节中的这句话。
图片说明

请问:多线中,thread_info与task_struct 是什么关系,是一对一,多对一,还是其他?

还有,多线程中,进程内核栈是否共享?

fork()函数创建一个简单的子进程,不会锁住,而多线程使用fork()比较危险,需要考虑同步和锁

明白了。想结贴给分了,找不到怎么结贴。请问在哪里结贴的?????