fork creates a child process that differs from the parent process only in its PID and PPID, and in the fact that resource utilizations are set to 0. File locks and pending signals are not inherited.
以上来自于man fork的解释。fork创建了一个与父进程的内存完全一致的子进程。即在fork的时刻拷贝了一份内存数据到子进程中。
在 POSIX 标准中,fork 的行为是这样的:复制整个用户空间的数据(通常使用 copy-on-write 的策略,所以可以实现的速度很快)以及所有系统对象,
然后仅复制当前线程到子进程。这里:所有父进程中别的线程,到了子进程中都是突然蒸发掉的。
其它线程的突然消失,是一切问题的根源。
其它线程的突然消失,是一切问题的根源。
这就会导致,父进程在获取到锁的情况下,fork了一个子进程。子进程的内存中,这个锁的状态是上锁状态。
子进程仅运行了fork所在的这个线程,其它线程没有运行,当它尝试获取锁时,就发生了死锁。
以下内容摘自
http://blog.csd