问题描述
新进程将是创建线程的主线程的子进程。我认为。
fork
创建一个新的过程。一个进程的父进程是另一个进程,而不是线程。因此,新流程的父级是旧流程。
请注意,子进程将只有一个线程,因为它fork
仅复制调用的(堆栈)线程fork
。(这不是完全正确的:整个内存都是重复的,但是子进程将只有一个活动线程。)
如果其父级先完成,则新进程将附加到init进程中。
如果父母先完成,SIGHUP
则向孩子发送信号。如果孩子没有因此而退出,SIGHUP
它将init
作为其新父母。有关nohup
和signal(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;
}
}