【问题标题】:Quit main loop maybe the thread is still running退出主循环可能线程仍在运行
【发布时间】:2026-01-20 15:40:02
【问题描述】:

大家好~我有一个让我很无聊的问题。 有时当我退出程序时,还有一些线程仍在运行,在Linux系统中,退出主循环后会导致崩溃。退出主循环时有什么方法可以杀死所有线程吗?

【问题讨论】:

    标签: linux multithreading process crash


    【解决方案1】:

    如果您指定了您选择的编程语言和线程库,将会有很大帮助。

    控制这种情况的常用方法(即父线程等待子线程完成后再终止)是调用库提供的函数,通常命名为 join等待

    例如,pthread 为您提供pthread_join

    如果您通过 fork 生成进程,您应该在父进程中使用 wait 或 waitpid 来暂停,直到子进程完成 - 尝试使用 man waitpid 或查看 this

    这样你可以通过通常的方式通知你的孩子你即将退出,等到他们结束并终止,然后干净地退出主循环。

    这有帮助吗?这是同步终止最不残酷的方式,如果您想主动杀死子线程,当然还有其他选择(例如 pthread_kill 用于 pthreads)。

    【讨论】:

    • 谢谢你的回答,我试试看。
    【解决方案2】:

    如果您使用的是 java,请尝试使用 jdk6u23 附带的 jconsole(Java 监控和管理控制台)。可以得到未被杀死的线程名。您可以使用 join 来完成该线程。

    但是可能存在程序问题,例如,在我的情况下,我有一个计时器线程挂起 [Timer-0] java.util.Timer 来创建一个 timer.cancel() 来关闭该计时器。

    【讨论】: