2

如果我调用pthread_create()创建一个线程,即使主进程已经退出,我怎样才能让这个线程保持活动状态?

4

7 回答 7

3

这不可能。进程由线程组成,线程不能单独存在。

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

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

  • 线程从其启动例程正常返回。它的工作已经完成。
  • 线程调用 pthread_exit 子例程——不管它的工作是否完成。
  • 该线程被另一个线程通过 pthread_cancel 例程取消。
  • 由于调用 exec() 或 exit() ,整个过程终止
  • 如果 main() 先完成,而没有显式调用 pthread_exit
于 2013-09-12T06:26:15.167 回答
2

如果你分离线程,在最后一个分离的线程完成之前,进程实际上不会结束,但是只有分离的线程才会运行。

您可以使用 分离线程pthread_detach

但是,要使其正常工作,您必须退出主线程(运行main函数的线程),使用pthread_exit和不使用exit或从其返回。

于 2013-09-12T06:28:18.203 回答
2

main 进程退出后不可能有一个活动的线程。但是使用pthread_exit(..)而不是exit(..)inside main(..),您可以等待其他线程退出。这将终止主线程,但其他线程将继续执行。

有关 的更多信息pthread_exit(),请访问此链接。

于 2013-09-12T06:43:02.910 回答
1

即使主进程已经退出,也不可能让线程保持活动状态。由于线程是主进程的一部分并且它使用相同的资源,一旦主程序退出它也会释放它的资源。所以进程退出后线程不能存活。

于 2013-10-16T10:39:33.060 回答
0

线程在进程“下”运行。main()代码在线程中运行。您在 main()(或其他线程)中创建的任何其他线程都在同一进程下运行。

应该可以让您的main()线程退出而不等待加入当前在同一进程下运行的其他线程。但是,我主要使用 Windows 并且没有尝试在 *nix 系统中运行它。

如果这样做,请确保每个线程在退出之前释放其资源。

于 2013-09-12T06:28:37.697 回答
0

你可以做的是退出 main()。在 main 中的处理结束时,就在您将退出的地方,只需输入以下内容:

int main(void) {
    ...
    ...

    while (1) sleep(10);

    return (0);
}

...或类似的东西。进程是其中产生的所有线程的容器,并且它必须存在才能使线程继续存在。让 main() 线程保持活动状态以便其他线程继续执行没有害处。

于 2013-09-12T06:29:44.160 回答
0

自身的线程不能在其生成的主线程之外运行。这是线程的定义

现在,您可以做的是让该线程生成具有所有相关信息的另一个进程,然后在死前加入主线程。

我担心的其他任何事情都需要主线程保持活动状态。

于 2013-09-12T06:36:52.680 回答