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