退出主循环可能线程仍在运行

时间:2011-03-28 09:29:35

标签: linux multithreading process crash

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

2 个答案:

答案 0 :(得分:3)

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

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

例如,

pthread为您提供pthread_join

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

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

这有帮助吗?这是同步终止的最残酷的方式,如果你想主动杀死子线程,当然还有替代方案(例如pthread_kill用于pthreads)。

答案 1 :(得分:0)

如果您正在使用java,请尝试使用jdk6u23附带的jconsole(Java Monitoring& Management Console)。您可以获取未被杀死的线程名称。您可以使用该线程的连接来完成。

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