【问题标题】:Do I need to check for my threads exiting?我是否需要检查我的线程是否退出?
【发布时间】:2016-11-02 14:30:17
【问题描述】:

我有一个嵌入式应用程序,在 Linux 上作为单个进程运行。

我使用sigaction()来捕捉问题,例如分段错误等

该进程有几个线程,所有这些线程都应该像应用程序一样永远运行。

我的问题是我是否应该(以及如何)检测其中一个线程是否死亡。

应用程序的sigaction() 处理程序会捕获线程中的段错误吗?

我正在考虑使用pthread_cleanup_push/pop,但是this page 说“如果进程中的任何线程调用exit、_Exit 或_exit,那么整个进程都会终止”,所以我想知道是否会捕获一个正在死去的线程进程级别……

【问题讨论】:

    标签: multithreading pthreads posix sigaction


    【解决方案1】:

    检查子线程是否完成不是必须的。 如果您需要在子线程完成处理后做某事,您可以从主线程调用thread_join(),这样它就会等到子线程完成执行,然后您可以完成剩下的工作。如果您在主线程中使用thread_exit,它将在完成后终止,让生成的线程继续执行。只有在所有线程完成执行后,该进程才会被杀死。

    如果你想检查生成线程的状态,你可以使用一个标志来检测它是否正在运行。查看此链接了解更多详情

    How do you query a pthread to see if it is still running?

    【讨论】:

    • 我的线程应该永远循环,并且必须终止,除非崩溃,这是我想要检测的。我不能阻止我的进程,检查线程。你有什么推荐的?
    • 线程不会崩溃,进程会。如果进程崩溃,就没有什么可做的检查了。
    猜你喜欢
    • 2011-02-21
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 2015-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多