退出主进程后如何保持线程活动?

时间:2013-09-12 06:24:33

标签: c linux multithreading pthreads

如果我调用pthread_create()创建一个线程,即使主进程已退出,如何使该线程保持活动状态?

7 个答案:

答案 0 :(得分:3)

这是不可能的。进程由线程组成,线程本身不能存在。

但是,如果你的意思是'主线程已退出'而不是'主进程已退出',那么在main()退出而不调用pthread_exit的情况下,请参阅下面的最后一个解释。在这种情况下,所有线程都是隐式终止的。如果main()在终止之前调用了pthread_exit,那么只有主线程退出而其他创建的线程继续运行。

有多种方法可以终止线程:

  • 线程从其启动例程正常返回。它的工作已经完成。
  • 线程调用pthread_exit子例程 - 它的工作是否完成。
  • 线程由另一个线程通过pthread_cancel例程取消。
  • 由于调用了exec()或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

现在,你可以做的是让那个线程产生另一个包含所有相关信息的进程,然后在死前重新加入主线程。

我担心的任何其他事情都需要让主线保持活力。