如果我调用pthread_create()
创建一个线程,即使主进程已退出,如何使该线程保持活动状态?
答案 0 :(得分:3)
这是不可能的。进程由线程组成,线程本身不能存在。
但是,如果你的意思是'主线程已退出'而不是'主进程已退出',那么在main()退出而不调用pthread_exit的情况下,请参阅下面的最后一个解释。在这种情况下,所有线程都是隐式终止的。如果main()在终止之前调用了pthread_exit,那么只有主线程退出而其他创建的线程继续运行。
有多种方法可以终止线程:
答案 1 :(得分:2)
如果你分离线程,那么在最后一个分离的线程完成之前,该进程实际上不会结束,但只有分离的线程才会运行。
您可以使用pthread_detach
分离线程。
为了使其正常工作,您必须使用main
而不是pthread_exit
退出主线程(运行exit
函数的线程)或从中返回。
答案 2 :(得分:1)
main
进程退出后,无法生成活动线程。但是,在pthread_exit(..)
中使用exit(..)
而不是main(..)
,您可以等待其他线程退出。这将终止主线程,但其他线程将继续执行。
有关pthread_exit()
的详情,请访问this link.
答案 3 :(得分:1)
即使主进程已退出,也无法使线程保持活动状态。 由于线程是主进程的一部分,并且它使用相同的资源,一旦主程序退出 它也将释放其资源。因此,在进程退出后线程无法生效。
答案 4 :(得分:0)
线程在“进程”下运行。 main()
代码在一个线程中运行。您在main()(或其他线程)中创建的任何其他线程都在同一进程下运行。
应该可以让你的main()
线程退出而不等待加入当前在同一进程下运行的其他线程。但是,我主要使用Windows,并没有尝试在* nix系统中运行。
如果这样做,请确保每个线程在退出之前释放其资源。
答案 5 :(得分:0)
你可以做的是不退出main()。在main处理结束时,你将退出的地方,只需输入:
int main(void) {
...
...
while (1) sleep(10);
return (0);
}
......或类似的东西。进程是容器,用于在其中生成的所有线程,并且必须存在才能使线程继续存在。将main()线程保持活动状态没有任何害处,以便其他线程继续执行。
答案 6 :(得分:0)
自身上的线程不能在其生成主线程之外运行。 这是definition of thread。
现在,你可以做的是让那个线程产生另一个包含所有相关信息的进程,然后在死前重新加入主线程。
我担心的任何其他事情都需要让主线保持活力。