Mac*_*c13 14 c unix multithreading fork
在Linux系统上,子进程是否以与父进程相同的方式查看现有线程?
int main() {
//create thread 1
int child_pid = fork();
if ( 0 == child_pid)
{
..
}
else
{
..
}
Run Code Online (Sandbox Code Playgroud)
由于为子进程复制了整个地址空间,因此线程的状态会发生什么.如果上段中的线程1正在等待条件信号,该怎么办?是否在儿童过程中处于等待状态?
nos*_*nos 18
现在linux上的线程试图保持posix complient.只复制调用线程,而不是其他线程(请注意,例如在solaris上,你可以选择fork做什么,具体取决于你链接的库)
来自http://www.opengroup.org/onlinepubs/000095399/functions/fork.html:
应使用单个线程创建进程.如果多线程进程调用fork(),则新进程应包含调用线程的副本及其整个地址空间,可能包括互斥锁和其他资源的状态.因此,为了避免错误,子进程可能只执行异步信号安全操作,直到调用其中一个exec函数为止.可以通过pthread_atfork()函数建立fork处理程序,以便跨fork()调用维护应用程序不变量.
线程不是使用 fork() 从 Linux 系统上的子进程继承的。深入的来源在这里: http: //linas.org/linux/threads-faq.html