退出主循环也许线程仍在运行

发布于 2024-10-28 04:35:55 字数 90 浏览 1 评论 0原文

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

Hi all~ I have a problem boring me so much.
Sometimes when I exit my program, there are some thread still running, in Linux system, it will cause crash after I quit the main loop. Is there any method that can kill all threads when I quit main loop?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

往事风中埋 2024-11-04 04:35:55

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

控制这种情况的常用方法(即父线程在终止之前等待子线程完成)是调用库提供的函数,通常名为 joinwait< /em>.

例如,pthread 为您提供 pthread_join

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

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

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

It would help a lot if you specified your programming language and threading library of choice.

The usual way to control this type of situation (that is for a parent thread to wait until children complete before terminating) is to call a function supplied by the library, usually named join or wait.

pthread supplies you with pthread_join, for example.

If you're spawning processes via fork, you should use wait or waitpid in the parent to halt until the child completes - try man waitpid or take a look at this.

This way you can inform your children that you are about to exit via the usual means, wait until they wrap up and terminate, then cleanly exit the main loop.

Does this help? This is the least brutal way of synchronizing termination, if you want to actively kill the children threads there are alternatives, of course (like pthread_kill for pthreads, for example).

紫罗兰の梦幻 2024-11-04 04:35:55

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

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

If you are using java try using the jconsole (Java Monitoring & Management Console) shipped with jdk6u23 in my case. You can get the thread name that is not killed. You can use join for that thread to complete.

But there can be program issue like, in my case i had a timer thread hanging [Timer-0] java.util.Timer to make an a timer.cancel() which closed that timer.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文