微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

线程分叉时会发生什么?

如何解决线程分叉时会发生什么?

新进程将是创建线程的主线程的子进程。我认为。

fork创建一个新的过程。一个进程的父进程是另一个进程,而不是线程。因此,新流程的父级是旧流程。

请注意,子进程将只有一个线程,因为它fork仅复制调用的(堆栈)线程fork。(这不是完全正确的:整个内存都是重复的,但是子进程将只有一个活动线程。)

如果其父级先完成,则新进程将附加到init进程中。

如果父母先完成,SIGHUP则向孩子发送信号。如果孩子没有因此而退出SIGHUP它将init作为其新父母。有关nohupsignal(7)的更多信息,请参见手册页SIGHUP

它的父级是主线程,而不是创建它的线程。

进程的父级是进程,而不是特定的线程,因此说主线程或子线程是父级是没有意义的。整个过程是父母。

最后一点:混合线和叉必须小心。

解决方法

我知道fork() sys_call从线程调用是一个坏主意。但是,如果线程使用创建新进程,将会发生什么fork()

新进程将是创建线程的主线程的子进程。我认为。

如果其父级先完成,则新进程将附加到init进程中。它的父级是主线程,而不是创建它的线程。

如果我错了,请纠正我。

#include <stdio.h>
#include <pthread.h>

int main () 
{
     thread_t pid;
     pthread_create(&(pid),NULL,&(f),NULL);
     pthread_join(tid,NULL);
     return 0;
}

void* f()
{
     int i;
     i = fork();

     if (i < 0) {
         // handle error
     } else if (i == 0) // son process
     {
          // Do something;
     } else {
          // Do something;
     }
 }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。